Pagini recente » Cod sursa (job #38666) | Cod sursa (job #1589772) | Cod sursa (job #1760527) | Cod sursa (job #2714106) | Cod sursa (job #2735733)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long n, t, d, ndiv, sdiv, i, j, P[1000006], nprim;
bool ciur[1000006];
long long expsqr(long long n, long long p)
{
n = n%9973;
if (p == 0) return 1;
else if (p == 1) return n%9973;
else if (p % 2 == 0) return (expsqr(n*n, p/2))%9973;
else if (p % 2 == 1) return (n*expsqr(n*n, (p-1)/2))%9973;
return 1;
}
int main()
{
ciur[0] = 1;
ciur[1] = 1;
for (i = 2; i < 1000005; i++)
{
if (ciur[i] == 0)
{
++nprim;
P[nprim] = i;
for (j = 2*i; j < 1000005; j+=i)
ciur[j] = 1;
}
}
fin >> t;
for (i = 1; i <= t; i++)
{
fin >> n;
long long N = n;
ndiv = 1; sdiv = 1;
for (j = 1; j <= nprim && 1LL*P[j]*P[j] <= N; j++)
{
if (N % P[j] == 0)
{
d = 0;
while (N%P[j] == 0)
{
d++;
N/=P[j];
}
ndiv *= (d+1);
int p1 = ((expsqr(P[j], d+1) - 1))%9973;
int p2 = (expsqr((P[j]-1), 9971))%9973;
sdiv = 1LL*(((sdiv*p1)%9973)*p2)%9973;
}
}
if (N > 1)
{
ndiv *= 2;
sdiv = (1LL*sdiv*(N+1)%9973);
}
fout << ndiv << " " << sdiv << "\n";
}
return 0;
}