Pagini recente » Cod sursa (job #1914241) | Cod sursa (job #1445429) | Cod sursa (job #3217722) | Cod sursa (job #2936576) | Cod sursa (job #756561)
Cod sursa(job #756561)
#include<stdio.h>
#define Mod 9901
#define Nrdivm (1<<14)
#define Nrpfm 10
long long a,b,ans;
int power(int a, int n)
{
if(!n)
return 1;
int v=power(a,n>>1);
if(n&1)
return v*v%Mod*(a%Mod)%Mod;
return v*v%Mod;
}
int suma(int p, int n)
{
if(!n)
return 1;
if(n&1)
return suma(p,n>>1)*(power(p,(n>>1)+1)+1)%Mod;
return (suma(p,n-1)+power(p,n))%Mod;
}
void rezolva()
{
int Div[Nrdivm],Pf[Nrpfm],M[Nrpfm],nrdiv=0,nrpf=0,i;
for(i=1;i*i<=a;++i)
if(a%i==0)
Div[++nrdiv]=i;
for(i=nrdiv;i;--i)
Div[++nrdiv]=a/Div[i];
for(i=2+(a==1);i<=nrdiv;++i)
if(a%Div[i]==0)
{
Pf[++nrpf]=Div[i];
M[nrpf]=0;
while(a%Div[i]==0)
{
++M[nrpf];
a/=Div[i];
}
}
ans=1;
for(i=1;i<=nrpf;++i)
ans=ans*suma(Pf[i],M[i]*b)%Mod;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%lld %lld", &a, &b);
rezolva();
printf("%lld",ans);
return 0;
}