Pagini recente » Cod sursa (job #3362165) | Cod sursa (job #3362244) | Cod sursa (job #3362225) | Cod sursa (job #3362240) | Cod sursa (job #3361785)
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000000;
const int MOD = 9973;
vector<pair<int,int>> factorize(int x, const vector<int>& spf)
{
vector<pair<int,int>> factors;
while (x > 1)
{
int p = spf[x];
int exponent = 0;
while (x % p == 0)
{
x /= p;
exponent++;
}
factors.push_back({p, exponent});
}
return factors;
}
long long power(long long base, long long exp)
{
long long result = 1;
while (exp > 0)
{
if (exp % 2)
result = result * base % MOD;
base = base * base % MOD;
exp /= 2;
}
return result;
}
long long inverse(long long x)
{
return power(x, MOD - 2);
}
int main()
{
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int T;
fin >> T;
vector<int> spf(MAX_N + 1);
for (int p = 2; p <= MAX_N; p++)
{
if (spf[p] == 0)
{
spf[p] = p;
if (1LL * p * p <= MAX_N)
{
for (long long multiple = 1LL * p * p;
multiple <= MAX_N;
multiple += p)
{
if (spf[multiple] == 0)
spf[multiple] = p;
}
}
}
}
while (T--)
{
int x;
fin >> x;
auto factors = factorize(x, spf);
long long nrDiv = 1;
long long sumDiv = 1;
for (auto f : factors)
{
int p = f.first;
int e = f.second;
nrDiv = nrDiv * (e + 1) % MOD;
long long numerator =
(power(p, e + 1) - 1 + MOD) % MOD;
long long denominator =
inverse(p - 1);
long long sumFactor =
numerator * denominator % MOD;
sumDiv = sumDiv * sumFactor % MOD;
}
fout << nrDiv << " " << sumDiv << '\n';
}
return 0;
}