欧拉线性筛
void Eular(int n){
for(int i=2;i<=n;i++){
if(!numlist[i])
prime[++cnt]=i;
for(int j=1;prime[j]<=n/i;j++){
numlist[i*prime[j]] =true;
if(i%prime[j]==0)
break;
}
}
return ;
}
约数个数
由唯一分解定理:
N=p1^a1*p2^a2*...pk^ak
N任何一个约数也可以写成
d=p1^b1*p2^b2*...pk^bk
因此b在a中选得到约数个数为:
(a1+1)*(a2+1)*...*(an+1)
约数之和
由唯一分解定理:
N=p1^a1*p2^a2*...pk^ak
则有约数之和为:
num=(p1^0+p1^1+...+p1^n)+...+(pn^0+pn^1+...+pn^n)
分解质因数
int gcd(int a,int b):
return b==0?a:gcd(b,a%b)