Pagini recente » Cod sursa (job #929752) | Cod sursa (job #2088237) | Cod sursa (job #68805) | Cod sursa (job #828605) | Cod sursa (job #1810368)
# include <fstream>
# define DIM 8000
# define MOD 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
long long f[DIM],d[DIM/5],a,b,k,i,j,s,nr;
long long putere(long long a,long long b){
if(b==0)
return 1;
long long t=putere(a,b/2);
if(b%2==1)
return (t*a%MOD)*t%MOD;
else
return t*t%MOD;
}
long long euclid(long long a,long long b,long long &x,long long &y){
if(!b){
x=1;
y=0;
return a;
}
long long xa,ya,r=euclid(b,a%b,xa,ya);
x=ya;
y=xa-(a/b)*ya;
return r;
}
void op(long long d,long long p){
long long dp=putere(d,p+1),x,y;
euclid(d-1,MOD,x,y);
dp-=1;
if(dp<0)
dp+=MOD;
s*=dp;
s%=MOD;
x%=MOD;
if(x<0)
x+=MOD;
s*=x;
s%=MOD;
}
int main () {
fin>>a>>b;
s=1;
if(a==0){
fout<<"0\n";
return 0;
}
if(b==0){
fout<<"1\n";
return 0;
}
for(i=2;i*i<=a;i++){
if(!f[i]){
d[++k]=i;
for(j=2*i;j*j<=a;j+=i)
f[j]=1;
}
}
for(i=1;i<=k;i++){
nr=0;
while(a%d[i]==0){
a/=d[i];
nr++;
}
if(nr)
op(d[i],nr*b);
}
if(a!=1){
if(a%MOD==1){
s*=b+1;
s%=MOD;
}
else
op(a,b);
}
fout<<s<<"\n";
return 0;
}