Pagini recente » Cod sursa (job #1431400) | Cod sursa (job #1015738) | Cod sursa (job #272001) | Cod sursa (job #2265721) | Cod sursa (job #755644)
Cod sursa(job #755644)
#include <fstream>
#include <math.h>
using namespace std;
char Er[1000005];
long Prime[100000];
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 long powint(long long a,long long n)
{
a %= 9973;
long long r,p;
r = 1;
p = a;
while (n > 0)
{
if (n & 1)
{
r = (r * p) % 9973;
}
p = (p * p) % 9973;
n >>= 1;
}
return r;
}
long long computesumelement(long long prim,long long exp)
{
long long p1,p2;
p1 = powint(prim,exp + 1) - 1;
p2 = powint(prim - 1,9973 - 2);
return (p1 * p2) % 9973;
}
void Compute(long long n,long long &r1,long long &r2)
{
r1 = 1;
r2 = 1;
long long primpos = 0;
long long fpos = 0;
long long stop = sqrt((double)(n)) + 10;
long long cnt;
while ((n > 1) && (Prime[primpos] <= stop))
{
if ((n % Prime[primpos]) == 0)
{
cnt = 0;
do
{
cnt += 1;
n /= Prime[primpos];
}
while ((n % Prime[primpos]) == 0);
r1 = r1 * (cnt + 1);
r2 = (r2 * computesumelement(Prime[primpos],cnt)) % 9973;
}
primpos += 1;
}
if (n > 1)
{
r1 *= 2;
r2 = (r2 * computesumelement(n,1)) % 9973;
fpos += 1;
}
}
int main(void)
{
Erathostene(1000000);
long long T,i,r1,r2;
long long n;
fstream fin("ssnd.in",ios::in);
fstream fout("ssnd.out",ios::out);
fin >> T;
for (i = 0;i < T;i += 1)
{
fin >> n;
Compute(n,r1,r2);
fout << r1 << " " << r2 << "\n";
}
fin.close();
fout.close();
return 0;
}