Pagini recente » Cod sursa (job #434478) | Cod sursa (job #394103)
Cod sursa(job #394103)
#include<stdio.h>
#include<stdlib.h>
#define M 9901
int a,b;
int np;
int p[10];
int e[10];
int rez;
inline int put(int b,int e)
{
int r=1;
b%=M;
for(; e>0; e>>=1)
{
if((e&1)==1)
r=(r*b)%M;
b=(b*b)%M;
}
return r;
}
inline int afla(int b,int e)
{
b%=M;
if(b==1)
return e+1;
if(b==0)
return 1;
int aux=put(b,e+1);
if(aux==0)
aux=M-1;
else
--aux;
return (aux*put(b-1,M-2))%M;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d%d",&a,&b);
if(a==0)
exit(4);
if(b==0)
{
printf("1\n");
return 0;
}
if((a&1)==0)
{
np=1;
p[0]=2;
while((a&1)==0)
{
a>>=1;
++e[0];
}
e[0]*=b;
}
for(int i=3; i*i<=a; i+=2)
{
if(a%i==0)
{
p[np]=i;
while(a%i==0)
{
++e[np];
a/=i;
}
e[np]*=b;
++np;
}
}
if(a!=1)
{
p[np]=a;
e[np]=b;
++np;
}
rez=1;
for(int i=0; i<np; ++i)
rez=(rez*afla(p[i],e[i]))%M;
printf("%d\n",rez);
return 0;
}