Pagini recente » Cod sursa (job #3325850) | Cod sursa (job #3340557) | Cod sursa (job #201605) | Cod sursa (job #1490978) | Cod sursa (job #3357784)
#include <iostream>
#include <fstream>
#include <bitset>
#include <vector>
constexpr const long long MOD = 9973;
constexpr const int MAX_N = 1e6;
long long pow(long long base, long long exponent) {
long long ans = 1;
while (exponent > 0) {
if (exponent & 1) ans = ans * base % MOD;
exponent >>= 1;
base = base * base % MOD;
}
return ans;
}
long long inv(long long num) {
return pow(num, MOD - 2);
}
int main() {
std::ifstream input("ssnd.in");
std::ofstream output("ssnd.out");
std::bitset<MAX_N + 1> sieve;
std::vector<int> primes;
sieve[0] = sieve[1] = true;
for (int i = 2; i <= MAX_N; ++i) {
if (!sieve[i]) {
primes.push_back(i);
for (long long j = (long long)i * i; j <= MAX_N; j += i) {
sieve.set(j);
}
}
}
int t;
input >> t;
while (t--) {
long long n;
input >> n;
long long cnt_div = 1, sum_div = 1;
for (int prime : primes) {
if ((long long)prime * prime > n) break;
if (n % prime != 0) continue;
int exp = 0;
while (n % prime == 0) {
exp++;
n /= prime;
}
cnt_div = cnt_div * (exp + 1) % MOD;
long long power = pow(prime, exp + 1);
sum_div = sum_div * ((power - 1 + MOD) % MOD) % MOD;
sum_div = sum_div * inv(prime - 1) % MOD;
}
if (n > 1) {
cnt_div = cnt_div * 2 % MOD;
long long power = pow(n, 2);
sum_div = sum_div * ((power - 1 + MOD) % MOD) % MOD;
sum_div = sum_div * inv(n - 1) % MOD;
}
output << cnt_div << " " << sum_div << '\n';
}
return 0;
}