Pagini recente » Cod sursa (job #2253323) | Cod sursa (job #2675812) | Cod sursa (job #728426) | Cod sursa (job #716483) | Cod sursa (job #2875417)
#include <bits/stdc++.h>
#define SQR 1000000
#define ULL unsigned long long
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
vector<ULL> prime;
void generare() {
bitset<SQR + 1> ciur;
ciur[0] = ciur[1] = 1;
for (ULL d = 4; d <= SQR; d += 2)
ciur[d] = 1;
for (ULL i = 3; i * i <= SQR; i += 2)
if (!ciur[i])
for (ULL d = i * i; d <= SQR; d += 2 * i)
ciur[d] = 1;
for (ULL i = 2; i <= SQR; i++)
if (!ciur[i])
prime.push_back(i);
}
int main() {
generare();
int t;
fin >> t;
for (int i = 0; i < t; i++) {
ULL x, nrDiv = 1, sumDiv = 1;
fin >> x;
if (x % 2 == 0) {
ULL p = 0, pw = 2;
while (x % 2 == 0)
p++, pw = (pw << 1) % MOD, x /= 2;
nrDiv = nrDiv * (p + 1) % MOD, sumDiv = sumDiv * (pw - 1) % MOD;
}
for (auto &prim: prime) {
if (prim * prim > x)
break;
else if (x % prim)
continue;
ULL p = 0, pw = prim;
while (x % prim == 0)
p++, pw = pw * prim % MOD, x /= prim;
nrDiv = nrDiv * (p + 1) % MOD, sumDiv = sumDiv * (pw - 1) % MOD / (prim - 1) % MOD;
}
if (x > 1)
nrDiv = nrDiv * 2 % MOD, sumDiv = sumDiv * (x * x - 1) % MOD / (x - 1) % MOD;
fout << nrDiv % MOD << ' ' << sumDiv % MOD << '\n';
}
return 0;
}