算术基本定理 求一个数的约数个数
算术基本定理 求一个数的约数个数
算术基本定理:
分解素因数:n=(p1^k1)*(p2^k2)*...*(pn*kn).(分解方式唯一)
n的约数个数为cnt(n)=(1+k1)*(1+k2)*...*(1+kn).
bool isprime[maxn]; vector<int> prime; void play_prime() { memset(isprime,1,sizeof(isprime)); isprime[1]=0; for(int i=2;i<maxn;i++){ if(!isprime[i]) continue; for(int j=i+i;j<maxn;j+=i){ if(isprime[j]) isprime[j]=0; } } for(int i=2;i<maxn;i++) if(isprime[i]) prime.push_back(i); } ll Cnt(ll n) { ll res=1; for(int i=0;prime[i]<=n&&i<prime.size();i++){ ll k=0; while(n%prime[i]==0){ n/=prime[i]; k++; } res*=(1+k); } if(n>1) res*=(1+1); return res; }
(2) 它的全体正因数之和为
并证明
没有AC不了的题,只有不努力的ACMER!