Pagini recente » Cod sursa (job #343330) | Cod sursa (job #2899334) | Cod sursa (job #2335947) | Cod sursa (job #805595) | Cod sursa (job #582531)
Cod sursa(job #582531)
#include<cstdio>
#include<vector>
#include<bitset>
using namespace std;
#define MOD 9901
#define pb push_back
#define NM 50000001
bitset<NM> viz;
vector<int > prim;
int N,M;
inline void ciur()
{
int d=2;
viz.reset();
while (d*d<=N)
{
if (viz[d])
{
++d;
continue;
}
prim.pb(d);
for (int i=d*d; i<=N; i+=d)
viz[i]=1;
++d;
}
for (;d<=N; ++d)
if (!viz[d])
prim.pb(d);
}
inline int mod(int a)
{
if (a>=MOD)
a%=MOD;
return a;
}
inline int putere(int n,int p)
{
if (!p)
return 1;
if (p&1)
{
n=mod(n);
return n*putere(mod(n*n),p>>1);
}
return putere(mod(n*n),p>>1);
}
inline void desc()
{
int g=prim.size();
int suma=1,baza=1;
for (int i=0; prim[i]*prim[i]<=N && i<g; ++i)
{
if (N%prim[i]!=0)
continue;
int p=0;
while (N%prim[i]==0)
{
N/=prim[i];
++p;
}
if (!p)
continue;
if (p==1)
--p;
int n=mod(prim[i]);
baza=mod(putere(n,M+p+1));
if (baza-1<0)
baza=MOD-baza;
n=mod(prim[i]);
suma=mod((baza-1)/(n-1)*suma);
}
if (N-1)
{
int n=mod(N);
baza=mod(putere(n,M+1));
if (baza-1<0)
baza=MOD-baza;
n=mod(N);
suma=mod((baza-1)/(n-1)*suma);
}
printf("%d ",suma);
}
inline void citire()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d%d",&N,&M);
ciur();
desc();
}
int main()
{
citire();
return 0;
}