将N分解质因数, 例如:N=360=2*2*2*3*3*5; 360=2^3*3^2*5 约数共有4*3*2个 其约数为2^i*3^j*5^k(0<=i<=3,0<=j<=2,0<=k<=1) 故约数之和为 (1+2+4+8)(1+3+9)(1+5)=1080 (上面括号中,每一个乘出来均为360的约数) 分解质因数模板: void GetPrim() // 筛选素数(模板); { is[0]=is[1]=1; for(int i=2;i<N;i++){ if(!is[i]){ p[++np]=i; for(int j=i*2;j<N;j+=i) is[j]=1; } } } vector<node> factor(LL n) // (动态数组)分解质因数(模板); { vector<node> ans; node t; for(int i=1;p[i]*p[i]<=n;i++){ if(n%p[i]==0){ t.x=p[i];t.cnt=0; while(n%p[i]==0) t.cnt++,n/=p[i]; ans.push_back(t); } } if(n!=1) t.cnt=1,t.x=n,ans.push_back(t); return ans; }