Pagini recente » Cod sursa (job #66738) | Cod sursa (job #1952670) | Cod sursa (job #1248661) | Cod sursa (job #1517770) | Cod sursa (job #2418405)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
const string FILE_NAME = "ssnd";
const int VAL_MAX { 1000005 };
const int MOD { 9973 };
ifstream in { FILE_NAME + ".in" };
ofstream out { FILE_NAME + ".out" };
int64_t T, N;
vector<int> primes;
int64_t noD, sumD;
void init() {
in >> T;
vector<bool> ciur(VAL_MAX, true);
for (int i { 2 }; i * i <= VAL_MAX; ++i)
if (ciur[i]) {
primes.push_back(i);
for (int j { i * i }; j <= VAL_MAX; j += i)
ciur[i] = false;
}
}
int64_t pow(int b, int e) {
int64_t sol { 1 };
for (; e; e /= 2, b = b * b % MOD)
if (e % 2 == 1)
sol = sol * b % MOD;
return sol;
}
void solve() {
in >> N;
noD = sumD = 1;
for (int i { 0 }; i < int(primes.size()) && primes[i] * primes[i] <= N; ++i) {
if (N % primes[i])
continue;
int b { primes[i] }, e { 0 };
while (N % b == 0) {
++e;
N /= b;
}
noD *= e + 1;
sumD *= (((1LL * pow(b, e + 1) - 1) % MOD) * pow(b - 1, MOD - 2)) % MOD;
sumD %= MOD;
}
if (N != 1) {
noD *= 2;
sumD *= (((1LL * pow(N, 2) - 1) % MOD) * pow(N - 1, MOD - 2)) % MOD;
sumD %= MOD;
}
}
void print() {
out << noD << ' ' << sumD << '\n';
}
int main() {
init();
while (T--) {
solve();
print();
}
}