虽然上面那篇文章把该讲的东西都讲了,但其实看得很费劲。
数论分块块长结论:对于正整数
n>p,
∀正整数i∧⌊n/p⌋=⌊n/i⌋,i≤⌊⌊n/p⌋n⌋。
证明:①当
p≤n 时:
结论 a:
∀正整数i≤n,⌊n/i⌋=⌊i+1n⌋。
a. 证明:反证,假设
∃自然数i≤n,⌊n/i⌋=⌊i+1n⌋。设
n=ik+s,s<i,n=(i+1)k+p,p<i+1。所以
n=ik+k+p=n−s+k+p,进而
k+p=s。由于
k≥n≥i>s,所以
k>s,p≥0。矛盾,证毕。
由结论 a 可得,问题变为证明
⌊⌊n/p⌋n⌋=p。设
⌊n/p⌋=k,即证
⌊n/k⌋=p。设
n=pk+s,由
⌊n/p⌋=k 得
s<p,由于
p≤n≤k 所以
n=(p+t)k+w,w<k,正整数t≥0。如法炮制:
n=pk+tk+w=n−s+tk+w 得到
−s+tk+w=0。所以
tk=s−w。注意到
s,w 都是余数,所以
s−w≤s<p≤k,
s−w<k。显然
t=0,得
w=s。式子
n=(p+t)k+w,w<k 的意义就是
⌊n/k⌋=p+t=p。
令
i=⌊⌊n/p⌋n⌋,即证
⌊n/p⌋=⌊n/i⌋,⌊n/p⌋=⌊i+1n⌋。继续设
⌊n/p⌋=k,即证
k=⌊n/i⌋=⌊⌊n/k⌋n⌋,k=⌊⌊n/k⌋+1n⌋。由①可知,
∀p≤n,⌊⌊n/p⌋n⌋=p。结合
k<n 可知
k=⌊⌊n/k⌋n⌋ 成立。问题变为证明
⌊⌊n/k⌋n⌋=⌊⌊n/k⌋+1n⌋。设
x=⌊n/k⌋,即证
⌊xn⌋=⌊x+1n⌋。反证,假设
⌊xn⌋=⌊x+1n⌋=m。则
x+1n∈[m,m+1),n/x∈[m,m+1)。变形得
n∈[m(x+1),x(m+1))。同理由
n/k∈(x,x+1) 可得
n∈[kx,k(x+1)),即
m(x+1)<k(x+1),kx<x(m+1),得
k∈(m,m+1),这样的
k 不存在,矛盾,假设不成立。
综上证毕。
数论分块的时间复杂度为
O(n)。
证明:即证
⌊n/i⌋ 的取值数量的数量级为
n。对于
i≤n,由结论 a 可得每一个
i 对应一个
⌊n/i⌋。对于
i>n,
⌊n/i⌋∈[1,n)。所以总共不超过
2n 种。证毕。