因子和

http://acm.hdu.edu.cn/showproblem.php?pid=1452

 1 /**
 2 因子和问题:
 3 S(6)=1+2+3+6=12;S(5)=1+5=6;
 4 S(30)=1+2+3+5+6+10+15+30=72;
 5 可知:
 6 S(30)=S(5*6)=S(5)*S(6);
 7 因子和积性函数,当gcd(a,b)=1时要S(a*b)=S(a)*S(b)
 8 如果p是素数
 9 S(p^n)=1+p+p^2+p^3+……+p^n=(p^(n+1)-1)/(p-1)
10 
11 %运算法则 1. (a*b)%p=(a%p)*(b%p)
12 %运算法则 2. (a/b)%p=(a*b^(-1)%p)
13 b^(-1)是b模p的逆元,即a*b%p=1;
14 例如:
15 2的逆元素是15 (%29),因为2*15=30%29=1
16 21的逆元素是18 (%29),因为21*18=378%29=1
17 **/
18 //求2004^x的因子和
19 #include <iostream>
20 using namespace std;
21 int kpow(int a,int n,int mod)
22 {
23     int ans;
24     if(n==0) return 1;
25     int temp=kpow(a,n/2,mod)%mod;
26     ans=temp*temp%mod;
27     if(n%2) ans=temp*temp*a%mod;
28     return ans;
29 }
30 int main()
31 {
32     int n,a,b,c,ans,mod=29;
33     while(cin>>n,n)
34     {
35         a=kpow(2,2*n+1,mod)-1;
36         b=(kpow(3,n+1,mod)-1)*15%29;
37         c=(kpow(22,n+1,mod)-1)*18%29;
38         ans=a*b*c%29;
39         cout<<ans<<endl;
40     }
41 }

 

 

posted @ 2012-07-27 17:14  qijinbiao1  阅读(583)  评论(0编辑  收藏  举报