Pagini recente » Cod sursa (job #12228) | Cod sursa (job #243477) | Cod sursa (job #1191121) | Cod sursa (job #174128) | Cod sursa (job #527871)
Cod sursa(job #527871)
#include <cstdio>
using namespace std;
const int N=1000005;
bool c[N];
int v[N];
void ciur()
{
int i,j,n;
for(i=2;i*i<N;++i)
if(!c[i])
for(j=i*i;j<N;j+=i)
c[j]=true;
n=0;
for(i=2;i<N;i++)
if(c[i]==false)
v[++n]=i;
}
long long Fast_pow(long long a, long long b)
{
long long p;
if(b==0)
return 1;
if(b==1)
return a;
p=Fast_pow(a%9901,b/2);
if(b%2==0)
return (p%9901 * p%9901)%9901;
if(b%2==1)
return (((p%9901* p%9901)%9901)*a%9901)%9901;
return 0;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
int i,p;
long long suma,a,b;
ciur();
scanf("%lld%lld",&a,&b);
suma=1;
for(i=1;v[i]*v[i]<=a;++i)
if(a%v[i]==0)
{
p=0;
while(a%v[i]==0)
{
++p;
a/=v[i];
}
suma=suma*(Fast_pow(v[i],p*b+1)-1)/(v[i]-1);
suma=suma%9901;
}
if(a!=1)
{
suma=suma*(Fast_pow(a,b+1)-1)/(a-1);
suma=suma%9901;
}
printf("%lld\n",suma);
return 0;
}