Pagini recente » Cod sursa (job #578729) | Cod sursa (job #1888845) | Cod sursa (job #989942) | Cod sursa (job #2073949) | Cod sursa (job #755640)
Cod sursa(job #755640)
#include <fstream>
#include <math.h>
using namespace std;
char Er[1000005];
long Prime[100000];
long PrimCount;
void Erathostene(long N)
{
long i,j;
for (i = 2;i <= N;i += 1)
{
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;
}
long long Factori[100000];
long long CFac[100000];
void Compute(long long n,long long &r1,long long &r2)
{
long long primpos = 0;
long long fpos = 0;
long long stop = sqrt((double)(n)) + 10;
while (n > 1)
{
if ((n % Prime[primpos]) == 0)
{
Factori[fpos] = Prime[primpos];
CFac[fpos] = 0;
do
{
CFac[fpos] += 1;
n /= Prime[primpos];
}
while ((n % Prime[primpos]) == 0);
fpos += 1;
}
primpos += 1;
}
long long i;
r1 = 1;
for (i = 0;i < fpos;i += 1)
{
r1 = r1 * (CFac[i] + 1);
}
r2 = 1;
for (i = 0;i < fpos;i += 1)
{
r2 = (r2 * computesumelement(Factori[i],CFac[i])) % 9973;
}
}
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;
}