专栏文章

关于数论分块时间复杂度和算法正确性的详细证明

算法·理论参与者 1已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@miqb5o9g
此快照首次捕获于
2025/12/04 01:55
3 个月前
此快照最后确认于
2025/12/04 01:55
3 个月前
查看原文
虽然上面那篇文章把该讲的东西都讲了,但其实看得很费劲。
数论分块块长结论:对于正整数 n>pn>p正整数in/p=n/i,inn/p\forall 正整数i\land \lfloor n/p \rfloor=\lfloor n/i \rfloor,i\le\lfloor \frac{n}{\lfloor n/p\rfloor}\rfloor
证明:①当 pnp\le \sqrt n 时:
结论 a:正整数in,n/ini+1\forall 正整数i\le \sqrt n,\lfloor n/i \rfloor \neq \lfloor \frac{n}{i+1} \rfloor
a. 证明:反证,假设 自然数in,n/i=ni+1\exist 自然数i\le \sqrt n,\lfloor n/i \rfloor = \lfloor \frac{n}{i+1} \rfloor。设 n=ik+s,s<i,n=(i+1)k+p,p<i+1n=ik+s,s<i,n=(i+1)k+p,p<i+1。所以 n=ik+k+p=ns+k+pn=ik+k+p=n-s+k+p,进而 k+p=sk+p=s。由于 kni>sk\ge \sqrt n\ge i>s,所以 k>s,p0k>s,p\ge0。矛盾,证毕。
由结论 a 可得,问题变为证明 nn/p=p\lfloor \frac{n}{\lfloor n/p\rfloor}\rfloor=p。设 n/p=k\lfloor n/p \rfloor=k,即证 n/k=p\lfloor n/k \rfloor=p。设 n=pk+sn=pk+s,由 n/p=k\lfloor n/p \rfloor=ks<ps<p,由于 pnkp\le\sqrt n\le k 所以 n=(p+t)k+w,w<k,正整数t0n=(p+t)k+w,w<k,正整数t\ge0。如法炮制:n=pk+tk+w=ns+tk+wn=pk+tk+w=n-s+tk+w 得到 s+tk+w=0-s+tk+w=0。所以 tk=swtk=s-w。注意到 s,ws,w 都是余数,所以 sws<pks-w\le s<p\le ksw<ks-w<k。显然 t=0t=0,得 w=sw=s。式子 n=(p+t)k+w,w<kn=(p+t)k+w,w<k 的意义就是 n/k=p+t=p\lfloor n/k \rfloor=p+t=p
②当 p>np>\sqrt n 时:
i=nn/pi=\lfloor \frac{n}{\lfloor n/p\rfloor}\rfloor,即证 n/p=n/i,n/pni+1\lfloor n/p \rfloor=\lfloor n/i \rfloor,\lfloor n/p \rfloor\neq\lfloor \frac{n}{i+1} \rfloor。继续设 n/p=k\lfloor n/p \rfloor=k,即证 k=n/i=nn/k,knn/k+1k=\lfloor n/i \rfloor=\lfloor\frac{n}{\lfloor n/k \rfloor}\rfloor,k\neq\lfloor \frac{n}{\lfloor n/k \rfloor+1} \rfloor。由①可知,pn,nn/p=p\forall p\le \sqrt n,\lfloor \frac{n}{\lfloor n/p\rfloor}\rfloor=p。结合 k<nk<\sqrt n 可知 k=nn/kk=\lfloor\frac{n}{\lfloor n/k \rfloor}\rfloor 成立。问题变为证明 nn/knn/k+1\lfloor\frac{n}{\lfloor n/k \rfloor}\rfloor\neq\lfloor\frac{n}{\lfloor n/k \rfloor+1}\rfloor。设 x=n/kx=\lfloor n/k \rfloor,即证 nxnx+1\lfloor\frac{n}{x}\rfloor\neq\lfloor\frac{n}{x+1}\rfloor。反证,假设 nx=nx+1=m\lfloor\frac{n}{x}\rfloor=\lfloor\frac{n}{x+1}\rfloor=m。则 nx+1[m,m+1),n/x[m,m+1)\frac{n}{x+1}\in[m,m+1),n/x\in[m,m+1)。变形得 n[m(x+1),x(m+1))n\in[m(x+1),x(m+1))。同理由 n/k(x,x+1)n/k\in(x,x+1) 可得 n[kx,k(x+1))n\in[kx,k(x+1)),即 m(x+1)<k(x+1),kx<x(m+1)m(x+1)<k(x+1),kx<x(m+1),得 k(m,m+1)k\in(m,m+1),这样的 kk 不存在,矛盾,假设不成立。
综上证毕。
数论分块的时间复杂度为 O(n)O(\sqrt n)
证明:即证 n/i\lfloor n/i \rfloor 的取值数量的数量级为 n\sqrt n。对于 ini\le \sqrt n,由结论 a 可得每一个 ii 对应一个 n/i\lfloor n/i \rfloor。对于 i>ni>\sqrt nn/i[1,n)\lfloor n/i \rfloor\in[1,\sqrt n)。所以总共不超过 2n2\sqrt n 种。证毕。

评论

2 条评论,欢迎与作者交流。

正在加载评论...