数论分块原理

数论分块模板题:数论分块原理 ,采用数论分块可以优化到数论分块原理

为书写方便以下数论分块原理都写做n/i

首先我们要知道这一点:存在一些连续的x1,x2...xk,有n/x1=n/x2=...=n/xk。比如100/34=100/35=100/36=...=100/50。对于这些连续出现的,我们只需要知道出现次数,然后只用计算其中一个数就可以了,比如:(n/x1)*(xk-x1+1)。

现在要找出n,x1和xk的关系。

下图用数轴描述了i和n/i的部分取值。其中

n/(i-b)=n/(i-b+1)=n/(i-b+2)=...=n/(i-1)=k+L;  

n/i=n/(i+1)=n/(i+2)=...=n/(i+a)           =k;

n/(i+a+1)=n/(i+a+2)=...n/(i+a+c)       =k-r;

数论分块原理

由上图还可得出:

n-(i-1)<(k+L)*(i-1)<=n

n-i < k*i <= n

n-(i+a+1)<(k-r)*(i+a+1)<=n

(结合下图看会比较直观)

数论分块原理

由于:n-i < k*i <= n

左右同时加上L*i得到:n-i+L*i < k*i+L*i <= n+L*i

合并同类项:n+(L-1)*i < (k+L)*i <= n+L*i

由于L>=1则:n< (k+L)*i

那么n/(k+L)<i

由于n-(i-1)<(k+L)*(i-1)<=n

那么n/(k+L)>=i-1

得:n/(k+L)=i-1

有了这个现在就好办了,结合上图我们就得出从i-b开始,到n/(k+L),这些数除以n向下取整的值都为k+L,而n/(i-b)=k+L。

最后得到从i-b开始,到n/(n/(i-b)),这些数除以n向下取整的值都为n/(i-b)。

同理应用于其它数段。

代码改日补上。