Pagini recente » Cod sursa (job #347509) | Cod sursa (job #1886960) | Cod sursa (job #1954049) | Cod sursa (job #1355302) | Cod sursa (job #2478469)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
typedef long long ll;
const int MAXN = 1e6, MOD = 9973;
bool sieve[MAXN + 1];
int primes[MAXN + 1], k;
void findPrimes() {
for (int i = 2; i <= MAXN; ++i)
if (!sieve[i]) {
primes[k++] = i;
for (int j = i; j <= MAXN; j += i)
sieve[j] = true;
}
}
void modInv(int a, ll b, ll &x, ll &y) {
if (!b) {
x = 1;
y = 0;
return;
}
modInv(b, a % b, x, y);
ll aux = x;
x = y;
y = aux - (a / b) * y;
}
void solve(ll n) {
ll sum = 1, nr = 1, inv, aux;
for (int i = 0; i < k && primes[i] * primes[i] <= n; ++i)
if (n % primes[i] == 0) {
ll power = primes[i], exp = 1;
while (n % primes[i] == 0) {
n /= primes[i];
power *= primes[i];
++exp;
}
nr = (nr * exp) % MOD;
power = (power - 1) % MOD;
sum = (sum * (power % MOD)) % MOD;
modInv(primes[i] - 1, MOD, inv, aux);
if (inv < 0)
inv += MOD;
sum = (sum * (inv % MOD)) % MOD;
}
if (n > 1) {
ll power;
nr = (nr * 2) % MOD;
power = ((n % MOD) * (n % MOD)) % MOD;
power = (power - 1) % MOD;
sum = (sum * (power % MOD)) % MOD;
modInv(n - 1, MOD, inv, aux);
if (inv < 0)
inv += MOD;
sum = (sum * (inv % MOD)) % MOD;
}
fout << nr << ' ' << sum << '\n';
}
int main() {
ll t, n;
findPrimes();
fin >> t;
for (int i = 0; i < t; ++i) {
fin >> n;
solve(n);
}
return 0;
}