Pagini recente » Cod sursa (job #2221277) | Cod sursa (job #1877460) | Cod sursa (job #2350940) | Cod sursa (job #786578) | Cod sursa (job #755633)
Cod sursa(job #755633)
#include <fstream>
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 powint(long a,long n)
{
a %= 9973;
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 computesumelement(long prim,long exp)
{
long p1,p2;
p1 = powint(prim,exp + 1) - 1;
p2 = powint(prim - 1,9973 - 2);
return ((p1 % 9973) * p2) % 9973;
}
long Factori[100000];
long CFac[100000];
void Compute(long n,long &r1,long &r2)
{
long primpos = 0;
long fpos = 0;
while ((n > 1) && (primpos < PrimCount))
{
if ((n % Prime[primpos]) == 0)
{
Factori[fpos] = Prime[primpos];
CFac[fpos] = 0;
while ((n % Prime[primpos]) == 0)
{
CFac[fpos] += 1;
n /= Prime[primpos];
}
fpos += 1;
}
primpos += 1;
}
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 T,i,n,r1,r2;
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;
}