Pagini recente » Cod sursa (job #554992) | Cod sursa (job #1809007) | Cod sursa (job #1047470) | Cod sursa (job #656882) | Cod sursa (job #1137190)
#include <fstream>
#include <vector>
#include <algorithm>
#define MOD 9973
using namespace std;
ifstream is ("ssnd.in");
ofstream os ("ssnd.out");
int n, T;
bool P[1000005];
vector <int> Prim;
int LgPow(int A, int B);
void Solve();
void Sieve();
int main()
{
is >> T;
Sieve();
for (int t = 0; t < T; ++t)
Solve();
is.close();
os.close();
return 0;
}
void Solve()
{
is >> n;
if (binary_search(Prim.begin(), Prim.end(), n) == true)
{
os << 2 << ' ' << (n+1) % MOD << '\n';
return;
}
int p, r1, r2, x, ND = 1, SD = 1;
for (int i = 0; i <= Prim.size() && 1LL * Prim[i] * Prim[i] <= n; ++i)
{
if (n % Prim[i] == 0)
{
p = 1;
for (; n % Prim[i] == 0; ++p)
n /= Prim[i];
ND *= p;
x = Prim[i]-1;
r1 = (LgPow(Prim[i], p)-1) % MOD;
r2 = LgPow(x, MOD-2) % MOD;
SD = (((SD * r1) % MOD) * r2) % MOD;
}
}
if (n > 1)
ND *= 2, SD = (SD * (n+1)) % MOD;
os << ND << ' ' << SD%MOD << '\n';
};
int LgPow(int A, int B)
{
if (B == 0) return 1;
if (B == 1) return A;
if (B % 2 == 0) return LgPow(A*A, B/2) % MOD;
if (B % 2 == 1) return (A*LgPow(A*A, B/2)) % MOD;
};
void Sieve()
{
for (int i = 2; i <= 1000001; ++i)
if (P[i] == 0)
{
Prim.push_back(i);
for (int j = i+i; j <= 1000001; j+=i)
P[j] = 1;
}
};