因子和

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 }

 

 

你可能感兴趣的:(因子和)