线性筛2 筛约数个数
线性筛2
1.筛约数个数
根据唯一分解定理
\(n = p_1^{k_1}p_2^{k_2}...p_q^{k_q}\)
任意质因子的任意次幂都可以随意组合, 所以根据乘法原理
\(n\)的约数个数为 \((1+k_1)*(1+k_2)*(1+k_3)*...(1+k_q)\)
so, 可以根据这个线性筛约数个数
首先设 \(num(i)\) 为\(i\) 的 \(k_1\) (也就是最小质因数的指数) \(d(i)\) 为 \(i\) 的约数个数
然后根据线性筛那套理论 分三种情况
- \(\large i是质数\)
很显然 $num(i) =2 $ \(d(i) = 2\)
- \(i\ \ mod\ \ prime[j]=0\)
说明\(i\) 中有这个质因数,且是\(i\) 的最小质因数
则 \(d(i*prime[j])=(1+k_1+1)*(1+k_2)*(1+k_3)*...(1+k_q)\)
\(=d(i)/num(i) * (num(i) +1)\)
\(num(i*prime[j])=num(i)+1\)
-
\(i\ \ mod\ \ prime[j]!=0\)
说明\(i\) 中没有这个质因数,且\(prime[j]\) 为\(i*prime[j]\) 的最小质因数
则\(d(i*prime[j])=(1+k_1)*(1+k_2)*(1+k_3)*...(1+k_q)*(1+k_{q+1})\)
\(=d(i)*(1+k_{q+1})\)
\(=d(i)*2\)
\(num(i*prime[j])=2\)
这里由于\(prime[j]\) 是第一次出现 所以是2