Pagini recente » Cod sursa (job #794570) | Cod sursa (job #472848) | Cod sursa (job #1189337) | Cod sursa (job #547779) | Cod sursa (job #3319645)
#include <bits/stdc++.h>
using namespace std;
const int MOD = 9973;
bool ciur[1000005];
int expmod(int a, long long k)
{
int p = 1;
while (k > 0)
{
if (k % 2 == 1)
{
p = 1LL * p * a % MOD;
}
a = 1LL * a * a % MOD;
k /= 2;
}
return p;
}
int inv_mod(int a)
{
return expmod(a, MOD - 2);
}
int main()
{
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
vector<int> prim;
for (int i = 2; 1LL * i * i <= 1000000; i++)
{
if (!ciur[i])
{
prim.push_back(i);
for (long long j = 1LL * i * i; j <= 1000000; j += i)
ciur[j] = true;
}
}
int q;
cin >> q;
while (q--)
{
long long a;
cin >> a;
int ans1 = 1, ans2 = 1;
long long copie = a;
for (int i = 0; i < (int)prim.size() && 1LL * prim[i] * prim[i] <= copie; i++)
{
int l = 0;
if (copie % prim[i] == 0)
{
while (copie % prim[i] == 0)
{
copie /= prim[i];
l++;
}
ans1 = 1LL * ans1 * (l + 1) % MOD;
int num = (expmod(prim[i], l + 1) - 1 + MOD) % MOD;
int den = (prim[i] - 1 + MOD) % MOD;
ans2 = 1LL * ans2 * num % MOD * inv_mod(den) % MOD;
}
}
if (copie > 1)
{
ans1 = 1LL * ans1 * 2 % MOD;
int num = (expmod(copie % MOD, 2) - 1 + MOD) % MOD;
int den = (copie % MOD - 1 + MOD) % MOD;
ans2 = 1LL * ans2 * num % MOD * inv_mod(den) % MOD;
}
cout << ans1 << ' ' << ans2 << '\n';
}
return 0;
}