Pagini recente » Cod sursa (job #2078601) | Cod sursa (job #1099784) | Cod sursa (job #1550982) | Cod sursa (job #3344445) | Cod sursa (job #3322566)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const int MOD=9901;
int euler(int n) {
int res=n,d=2;
while(d*d<=n) {
if(n%d==0) {
res=(res/d)*(d-1);
while(n%d==0) {
n/=d;
}
}
d++;
}
if(n!=1) {
res=(res/n)*(n-1);
}
return res;
}
int lgpow(int a,int e) {
a%=MOD;
int p=1;
while(e) {
if(e%2) {
p=(p*a)%MOD;
}
a=(a*a)%MOD;
e/=2;
}
return p;
}
int inverse(int a,int phi) {
return lgpow(a,phi-1);
}
int multiply(int sum,int d,int exponent,int phi) {
if(d%MOD!=1) {
sum=((long long)sum*(lgpow(d,exponent)-1+MOD)*inverse(d-1,phi))%MOD;
} else {
sum=((long long)sum*exponent)%MOD;
}
return sum;
}
int main() {
int d,sum,phi,a,n;
fin>>a>>n;
phi=euler(MOD);
d=2;
sum=1;
while(d*d<=a) {
if(a%d==0) {
int p=0;
while(a%d==0) {
p++;
a/=d;
}
sum=multiply(sum,d,p*n+1,phi);
}
d++;
}
if(a!=1) {
sum=multiply(sum,a,n+1,phi);
}
fout<<sum;
return 0;
}