题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1452
题目大意:
求2004^x的因子和对于29取模的结果。
题解:
2004的素因子只有:2,3,167.
2004^x的因子和可以分解成:
332关于29的逆元是9
除法取模求逆元。
ac代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod 29
ll mul(ll a, ll n) //快速幂 a^n % p
{
ll ans = 1;
while(n)
{
if(n & 1) ans = ans * a % mod; //若不取模就去掉p
a = a * a % mod;
n >>= 1;
}
return ans;
}
int main(){
long long a,x,y,z;
while(cin>>a&&a){ //当gcd(a,b)=1时 s(a*b)=s(a)*s(b);
x=mul(2,2*a+1)-1; //s(p^n)=1+p+p^2+...+p^n= (p^(n+1)-1)/(p-1)
y=mul(3,a+1)-1; //s(2004^X)=s(2^2X)*s(3^X)*s(167^X)
z=mul(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
return 0;
}