Pagini recente » Cod sursa (job #2963451) | Cod sursa (job #1850062) | Cod sursa (job #2961608) | Cod sursa (job #46393) | Cod sursa (job #3236660)
#include<fstream>
#define PRIMMAX 7200
#define NRPRIME 930
#define MOD 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
bool ciur_v[PRIMMAX];
int prim[NRPRIME];
int nrPrime=1,S=1;
int A,B;
void ciur()
{
int i,j;
prim[nrPrime]=2;
for(i=3; i<PRIMMAX-1; i+=2)
if(!ciur_v[i])
{
prim[++nrPrime]=i;
for(j=3 * i; j<PRIMMAX-1; j+=2*i)
ciur_v[j]=1;
}
}
int powlg(int N, long long P)
{
int sol=1;
N%=MOD;
while(P)
{
if(P&1)
sol=(sol*N)%MOD;
N=(N*N)%MOD;
P>>=1;
}
return sol;
}
int sumDiv(int nr, int exp)
{
if(nr%MOD==1)
return exp*B+1;
return (powlg(nr,1LL*exp*B+1)+MOD-1)*(powlg(nr-1,MOD-2))%MOD;
}
int main()
{
ciur();
f>>A>>B;
for(int i=1; (prim[i]*prim[i]<=A)&&(i<=nrPrime); i++)
{
if(A%prim[i]==0)
{
int exp =0;
while(A%prim[i]==0)
{
A/=prim[i];
exp++;
}
S=(S*sumDiv(prim[i],exp))%MOD;
}
}
if(A!=1)
S=(S*sumDiv(A,1))%MOD;
g<<S;
return 0;
}