首页 > 其他 > 详细

线性筛2 筛约数个数

时间:2019-11-03 21:40:38      阅读:68      评论:0      收藏:0      [点我收藏+]

线性筛2

1.筛约数个数

根据唯一分解定理

\(\huge 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\) 的约数个数

然后根据线性筛那套理论 分三种情况

  1. ? \(\large i是质数\)

很显然 $num(i) =2 $ \(d(i) = 2\)

  1. \(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\)

  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

线性筛2 筛约数个数

原文:https://www.cnblogs.com/spbv587/p/11788826.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!