hdu1452

本文探讨了如何计算2004的某个次幂的所有因数之和,然后对29取模得到的结果。通过利用快速幂和求和公式,解决了一个涉及数论和模运算的问题。

链接:点击打开链接

题意:求2004的X次幂的所有因数的和对29取模的值是多少

代码:

#include <iostream>

using namespace std;
#define mod 29
long long quickmod(long long a,long long b){
    long long sum=1;
    while(b){
    if(b%2)
    sum=sum*a%mod;
    b/=2;
    a=a*a%mod;
    }
    return sum;
}
int main()
{
    long long a,x,y,z;
    while(cin>>a&&a){               //当gcd(a,b)=1时 s(a*b)=s(a)*s(b);
    x=quickmod(2,2*a+1)-1;          //s(p^n)=1+p+p^2+...+p^n= (p^(n+1)-1)/(p-1)
    y=quickmod(3,a+1)-1;            //s(2004^X)=s(2^2X)*s(3^X)*s(167^X)
    z=quickmod(167,a+1)-1;          //s(2^2X)=2^(2X+1)-1
    z=z*9;                          //s(3^X)=(3^(X+1)-1)/2
    cout<<x*y*z%mod<<endl;          //s(167^X)=(167^(X+1)-1)/166
    }                               //直接求332对29的逆元为9
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值