Pagini recente » Cod sursa (job #2293845) | Cod sursa (job #219624) | Cod sursa (job #3173417) | Cod sursa (job #1734054) | Cod sursa (job #2275224)
#include <iostream>
#include <fstream>
#define MOD 9973
#define MAX 1000001
using namespace std;
int sd = 1, nd = 1, kp, prime[78500];
bool v[MAX];
pair<int, int> eucl_ext(int a, int b)
{
if (b == 0)
return { 1, 0 };
auto p = eucl_ext(b, a % b);
return { p.second, p.first - a / b * p.second };
}
int inv_mod(int x, int y)
{
int inv = eucl_ext(x, y).first;
if (inv < 0) inv += y;
return inv;
}
int pw(int x, int y)
{
int p = 1, m = x;
while (y)
{
if (y & 1)
{
p = (p * m) % MOD;
y--;
}
else
{
m = (m * m) % MOD;
y = y >> 1;
}
}
return p;
}
void ciur_gen()
{
for (int i = 2; i <= MAX; i++)
{
if (!v[i])
{
prime[kp++] = i;
for (int j = i << 1; j <= MAX; j += i)
v[j] = 1;
}
}
}
void sdm(long long &x, long long d)
{
int p = 1;
while (x % d == 0)
{
x /= d;
p++;
}
sd = (sd * p) % MOD;
nd = (nd * (pw(d, p) - 1) * inv_mod(d - 1, MOD)) % MOD;
}
void dvs(long long x)
{
for (int i = 0; prime[i] * prime[i] <= x; i++)
sdm(x, prime[i]);
if (x > 1) sdm(x, x);
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
ciur_gen();
int n, x;
f >> n;
for (; n; n--)
{
f >> x;
dvs(x);
g << sd << " " << nd << "\n";
sd = nd = 1;
}
return 0;
}