N的所有约数之和

将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的约数)

分解质因数模板:

  1. void GetPrim()          //  筛选素数(模板);   
  2. {  
  3.     is[0]=is[1]=1;  
  4.     for(int i=2;i<N;i++){  
  5.         if(!is[i]){  
  6.             p[++np]=i;  
  7.             for(int j=i*2;j<N;j+=i) is[j]=1;  
  8.         }  
  9.     }  
  10. }  
  11. vector<node> factor(LL n)   //  (动态数组)分解质因数(模板);   
  12. {  
  13.     vector<node> ans;  
  14.     node t;  
  15.     for(int i=1;p[i]*p[i]<=n;i++){  
  16.         if(n%p[i]==0){  
  17.             t.x=p[i];t.cnt=0;  
  18.             while(n%p[i]==0) t.cnt++,n/=p[i];  
  19.             ans.push_back(t);  
  20.         }  
  21.     }  
  22.     if(n!=1) t.cnt=1,t.x=n,ans.push_back(t);  
  23.     return ans;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值