Pagini recente » Cod sursa (job #2578786) | Cod sursa (job #2779255) | Cod sursa (job #2391388) | Cod sursa (job #2181211) | Cod sursa (job #755677)
Cod sursa(job #755677)
#include <fstream>
#include <math.h>
using namespace std;
char Er[7200];
long Prime[1000];
long PrimCount;
void Erathostene(long N)
{
Prime[0] = 2;
PrimCount = 1;
long i,j;
for (i = 3;i <= N;i += 2)
{
if (Er[i] == 0)
{
Prime[PrimCount] = i;
PrimCount += 1;
for (j = (i << 1);j <= N;j += i)
{
Er[j] = 1;
}
}
}
}
long powint(long a,long n)
{
a %= 9901;
long r,p;
r = 1;
p = a;
while (n > 0)
{
if (n & 1)
{
r = (r * p) % 9901;
}
p = (p * p) % 9901;
n >>= 1;
}
return r;
}
long computesumelement(long prim,long exp)
{
long p1,p2;
p1 = powint(prim,exp + 1) - 1;
p2 = powint(prim - 1,9899);
return (p1 * p2) % 9901;
}
void Compute(long A,long B,long &C)
{
C = 1;
long primpos = 0;
long cnt;
while ((A > 1) && (Prime[primpos] * Prime[primpos] <= A))
{
if ((A % Prime[primpos]) == 0)
{
cnt = 0;
do
{
cnt += 1;
A /= Prime[primpos];
}
while ((A % Prime[primpos]) == 0);
C = (C * computesumelement(Prime[primpos],cnt * B)) % 9901;
}
primpos += 1;
}
if (A > 1)
{
if (A == 9901)
{
return;
}
C = (C * computesumelement(A,B)) % 9901;
}
}
int main(void)
{
Erathostene(7100);
long A,B,C;
fstream fin("sumdiv.in",ios::in);
fstream fout("sumdiv.out",ios::out);
fin >> A >> B;
Compute(A,B,C);
fout << C;
fin.close();
fout.close();
return 0;
}