Pagini recente » Cod sursa (job #1984064) | Profil Asgari_Armin | Cod sursa (job #2477084) | Cod sursa (job #1766073) | Cod sursa (job #254807)
Cod sursa(job #254807)
#include <stdio.h>
#define NR 9901
int e[30000],r=0;
long long a,b,suma=1;
void citire()
{
scanf("%lld%lld",&a,&b);
b=b;
}
int euler(int n)
{
int i=1,rez=n;
for (i=2; i*i<=n; i++)
{
if (n%i==0)
{
while(n%i==0)
n/=i;
rez=rez/i*(i-1);
}
}
if (n!=1)
rez=rez/n*(n-1);
return rez;
}
long long putere(int a,int b,int c)
{
long long s=1;
while(b)
{
if (b%2)
s=s*a%c;
a=(long long)a*a%c;
b/=2;
}
return s;
}
void precalcul()
{
int i,t;
t=euler(NR)-1;
for (i=1; i<=30000; i++)
e[++r]=putere(i,t,NR)%NR;
}
int power(long long n,long long p)
{
long long s=1;
n=n%NR;
while(p)
{
if (p%2)
s=s*n%NR;
n=n*n%NR;
p/=2;
}
return s;
}
void rezolvare()
{
long long i,exp;
if (b==0)
{
printf("1");
return ;
}
if (a==NR)
{
printf("1");
return;
}
for (i=2; i*i<=a; i++)
{
if (a%i==0)
{
exp=0;
while (a%i==0)
{
a/=i;
exp++;
}
suma*=(power(i,exp*b+1)-1)/e[i-1]%NR;
}
}
if (a!=1)
suma*=(power(a,b+1)-1)/(a-1)%NR;
printf("%lld",suma%NR);
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
citire();
precalcul();
rezolvare();
//printf("%lld",suma%NR);
return 0;
}