Pagini recente » Cod sursa (job #2580978) | Cod sursa (job #88634) | Cod sursa (job #497264) | Cod sursa (job #1991404) | Cod sursa (job #1506602)
#include <cstdio>
#include <cstdlib>
#define MAXN 5000
#define MOD 9901
int div1[MAXN],exp[MAXN];
using namespace std;
inline int cmmdc(int a,int b){
int r;
while(b){
r=a%b;
a=b;
b=r;
}
return a;
}
inline int put(int a,int b){
int prod=1;
while(b){
if(b&1)
prod=(prod*a)%MOD;
b>>=1;
a=(a*a)%MOD;
}
return prod;
}
inline int cauta(int a,int b){
int i,flag=0,nr,z;
nr=put(a%MOD,b+1)-1;
z=cmmdc(a-1,MOD);
i=1;
while(i<=MOD&&flag==0){
if(nr==((a-1)*i/z))
flag=i;
i++;
}
return flag;
}
int main(){
FILE*fi,*fout;
int i,con,a,b,prod;
fi=fopen("sumdiv.in" ,"r");
fout=fopen("sumdiv.out" ,"w");
fscanf(fi,"%d%d" ,&a,&b);
i=2;
con=0;
while(i*i<=a){
while(a%i==0){
a/=i;
exp[con]++;
}
if(exp[con]>0)
div1[con++]=i;
i++;
}
if(a){
exp[con]=1;
div1[con++]=a;
}
prod=1;
for(i=0;i<con;i++)
prod=(prod*cauta(div1[i],exp[i]*b));
fprintf(fout,"%d" ,prod);
fclose(fi);
fclose(fout);
return 0;
}