Pagini recente » Cod sursa (job #2140424) | Cod sursa (job #1259142) | Cod sursa (job #2003486) | Cod sursa (job #2720693) | Cod sursa (job #181206)
Cod sursa(job #181206)
#include<stdio.h>
#define Mod 9901
#define Nrdivm (1<<14)
#define Nrpfm 10
int a,b,ans;
void read()
{
freopen("sumdiv.in","r",stdin);
scanf("%d%d",&a,&b);
}
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 sum(int p, int n)
{
if(!n)
return 1;
if(n&1)
return sum(p,n>>1)*(power(p,(n>>1)+1)+1)%Mod;
return (sum(p,n-1)+power(p,n))%Mod;
}
void solve()
{
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*sum(Pf[i],M[i]*b)%Mod;
}
void write()
{
freopen("sumdiv.out","w",stdout);
printf("%d\n",ans);
}
int main()
{
read();
solve();
write();
return 0;
}