Pagini recente » Cod sursa (job #2837744) | Cod sursa (job #1080461) | Cod sursa (job #2722265) | Cod sursa (job #2830927) | Cod sursa (job #2418414)
#include <fstream>
#include <vector>
using namespace std;
const string FILE_NAME = "ssnd";
const int VAL_MAX { 1000005 };
const int64_t 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 < VAL_MAX; ++i)
if (ciur[i]) {
primes.push_back(i);
for (int64_t j = 1LL * i * i; j < VAL_MAX; j += i)
ciur[j] = 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()) && 1LL * 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 *= (((pow(b, e + 1) - 1) % MOD) * pow(b - 1, MOD - 2)) % MOD;
sumD %= MOD;
}
if (N != 1) {
noD *= 2;
sumD = sumD * (N + 1) % MOD;
}
}
void print() {
out << noD << ' ' << sumD << '\n';
}
int main() {
init();
while (T--) {
solve();
print();
}
}