求一个数的因子个数及其因子和
在数论中有一个质因数分解定理,可利用其中的一些性质来求一个数的因子个数及其因子和,下面附上定理及代码。
#include<bits/stdc++.h> using namespace std; //求因子个数 int fun1(int x) { int len=sqrt(x); int ans=1; int cnt; for(int i=2;i<=len;i++) { cnt=0; while(x%i==0) { x/=i;cnt++; } ans*=(1+cnt); } if(x>1) ans*=2;//x>1说明还剩最后一个因子,所以要乘(1+1) return ans; } //求因子和 int fun2(int x) { int len=sqrt(x); int ans=1; int cnt; for(int i=2;i<=len;i++) { cnt=1; while(x%i==0) { cnt*=i; x/=i; } ans*=(cnt*i-1)/(i-1); } if(x>1) ans*=(x+1);同理剩下一个因子,且其指数为1,所以乘以(x^2-1)/(x-1)=(x+1) return ans; } int main() { int n; cin>>n; printf("%d %d",fun1(n),fun2(n)); return 0; }
心中所爱,山海可平