Pagini recente » Cod sursa (job #883341) | Cod sursa (job #2961133) | Cod sursa (job #848356) | Cod sursa (job #1097355) | Cod sursa (job #193638)
Cod sursa(job #193638)
#include<stdio.h>
#define M 9901UL
unsigned long putere(unsigned x,unsigned e){
unsigned p=1,y=1;
while(p<=e) p*=2;
do{
p/=2;
y*=y;
y%=M;
if(e>=p){
e-=p;
y*=x;
y%=M;
}
}while(p>1);
return y%M;
}
int main(){
freopen("sumadiv.in","r",stdin);
freopen("sumadiv.out","w",stdout);
unsigned long i,p,a,b,s,sp,d,fpa[40]={0},efpa[40]={0},nrfp;
scanf("%lu%lu",&a,&b);
nrfp=0;
if(!(a%2)){
fpa[0]=2;
while(!(a%2)){
efpa[0]++;
a/=2;
}
nrfp++;
}
for(d=3;d*d<=a;d+=2)
if(!(a%d)){
fpa[nrfp]=d;
while(!(a%d)){
efpa[nrfp]++;
a/=d;
}
nrfp++;
}
if(a>1) {
fpa[nrfp]=a;
efpa[nrfp]=1;
nrfp++;
}
for(i=0;i<nrfp;++i) efpa[i]*=b;
s=1;
for(i=0;i<nrfp;++i){
p=putere(fpa[i]%M,(efpa[i]+1)%M);
sp=(p-1)/(fpa[i]-1);
s=s*sp%M;
}
printf("%lu",s%M);
return 0;
}