Pagini recente » Cod sursa (job #1023717) | Cod sursa (job #1832551) | Cod sursa (job #2187009) | Cod sursa (job #751151) | Cod sursa (job #393728)
Cod sursa(job #393728)
#include <stdio.h>
#define NMAX 10005
#define MOD 9901
#define ll long long
int a,b,r,rez=1;
struct div
{
int a,b;
};
div A[NMAX];
void divs()
{
int i;
for (i=2; i*i<=a; i++)
if (a%i==0)
{
A[++r].a=i;
while (a%i==0)
{
a/=i;
A[r].b++;
}
A[r].b*=b;
}
if (a!=1)
A[++r].a=a,A[r].b=b;
}
int lgput(int baza,int exp)
{
ll part=1,part2=baza;
while (exp)
{
if (exp & 1)
part*=part2,part%=MOD;
part2*=part2;
part2%=MOD;
exp>>=1;
}
return part;
}
int factor(int baza,int exp)
{
if (baza%MOD==1)
return exp+1;
baza%=MOD;
int act=lgput(baza,exp+1),act2=lgput(baza-1,MOD-2);
act--;
if (act<0)
act+=MOD;
return (act*act2)%MOD;
}
void solve()
{
int i;
for (i=1; i<=r; i++)
rez*=factor(A[i].a,A[i].b),rez%=MOD;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d%d",&a,&b);
divs();
solve();
printf("%d\n",rez);
return 0;
}