Pagini recente » Cod sursa (job #1349028) | Cod sursa (job #3148957) | Cod sursa (job #3230836) | Cod sursa (job #3284900) | Cod sursa (job #3255252)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const int NMAX=7100;
const int MOD=9901;
int s=1, a, b, i, j, k=1;
int p[NMAX], viz[NMAX];
void ciur(){
for(i=2;i<=NMAX;i++){
if(viz[i]==0){
p[k]=i;
k++;
for(j=i*2;j<=NMAX;j+=i) viz[j]=1;
}
}
}
void euclid(int a, int b, int &x, int &y){
if(b==0) x=y=1;
else{
int x1, y1;
euclid(b, a%b, x1, y1);
x=y1;
y=x1-a/b*y1;
}
}
int invMod(int a, int n){
int x, y;
euclid(a, n, x, y);
while(x<0) x+=n;
return x;
}
int lgput(int a,int p){
if(p==0) return 1;
if(p%2==0) return lgput((a%MOD)*(a%MOD)%MOD, p/2)%MOD;
else return (a%MOD)*(lgput((a%MOD)*(a%MOD)%MOD, p/2)%MOD)%MOD;
}
int main(){
ciur();
fin>>a>>b;
for(i=1;p[i]<=a;i++){
int d=0;
while(a%p[i]==0){
a/=p[i];
d++;
}
s*=(lgput(p[i], d*b+1)-1)*invMod(p[i]-1, MOD)%MOD;
s=s%MOD;
}
if(a==1)
fout<<s;
else{
s*=(lgput(a, b+1)-1)*invMod(a-1, MOD)%MOD;
fout<<s;
}
return 0;
}