约数个数定理
对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
则n的正约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1) .
ll getnum(ll n) //得到a的约数个数.
{
ll res=1;
for(ll i=2;i*i<=n;i++){
ll k=0;
while(n%i == 0){
n = n/i;
k++;
}
if(k) res *= (k+1);
}
if(n != 1) res=res*2;
if(res==1){
if(n==1) return 1;
else return 2;
}
return res;
}
约数和定理
对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)
ll qpow(ll x, ll y )
{
ll res = 1;
while(y){
if(y&1) res *= x;
x *= x;
y >>= 1 ;
}
return res;
}
ll getsum(ll n) //返回n的约数和是多少.
{
ll res=1;
for(ll i=2;i*i<=n;i++){
ll k=0;
while(n%i == 0){
n = n/i;
k++;
}
res *= ((1-qpow(i,k+1))/(1-i));
} //用等比数列公式(快速幂)算.
if(n != 1) res *= (1 + n);
return res;
}