Pagini recente » Cod sursa (job #1500004) | Cod sursa (job #1504061) | Cod sursa (job #499561) | Cod sursa (job #1147738) | Cod sursa (job #530193)
Cod sursa(job #530193)
#include <fstream>
using namespace std;
const int N=100005;
const int m=9901;
bool c[N];
int v[N];
int inv[N];
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
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%m;
p=Fast_pow(a%m,b/2);
if(b%2==0)
return (p%m * p%m) %m;
if(b%2==1)
return ((p%m * p%m)%m*a%m)%m;
return 0;
}
int invers(int x)
{
int i;
for(i=1;i<m;i++)
if((i*x)%m==1)
{
inv[i]=x;
inv[x]=i;
return i;
}
return 0;
}
int main()
{
long long i,p,j;
long long suma,a,b,x;
ciur();
in>>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];
}
x=p*b+1;
if(v[i]%m==0)
j=v[i]+m-1;
else
j=(v[i]-1)%m;
if(v[i]%m==1)
suma=suma*x;
else
{
if(inv[j]==0)
invers(j);
suma=suma*((Fast_pow(v[i],x)+m-1)%m)*inv[j];
suma=suma%m;
}
}
if(a!=1)
{
x=b+1;
if(a%m==0)
j=a+m-1;
else
j=a-1;
if(a%m==1)
suma=(suma*x)%m;
else
{
if(inv[j]==0)
invers(j);
suma=suma*(Fast_pow(a,x)-1)*(inv[j]);
suma=suma%m;
}
}
out<<suma;
return 0;
}