Pagini recente » Cod sursa (job #3352666) | Cod sursa (job #1937467) | Cod sursa (job #2606364) | Cod sursa (job #3323050) | Cod sursa (job #3329157)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int mare = 1000000;
const int mod = 9973;
bool ciur[mare + 2];
int prime[mare], nrprime;
int t;
long long n;
long long ridica(long long nr, int p);
int main() {
ciur[0] = ciur[1] = true;
for (int i = 2; i <= mare; i++) {
if (!ciur[i]) {
prime[++nrprime] = i;
for (int j = i * 2; j <= mare; j += i)
ciur[j] = true;
}
}
fin >> t;
while (t--) {
fin >> n;
long long nrdiv = 1;
long long suma = 1;
for (int i = 1; i <= nrprime && 1LL * prime[i] * prime[i] <= n; i++) {
if (n % prime[i] != 0)
continue;
int d = 0;
while (n % prime[i] == 0) {
d++;
n /= prime[i];
}
nrdiv = nrdiv * (d + 1) % mod;
suma = suma * (ridica(prime[i], d + 1) - 1 + mod) % mod;
suma = suma * ridica(prime[i] - 1, mod - 2) % mod;
}
if (n != 1) {
nrdiv = nrdiv * 2 % mod;
suma = suma * (ridica(n, 2) - 1 + mod) % mod;
suma = suma * ridica(n - 1, mod - 2) % mod;
}
fout << nrdiv << " " << suma << "\n";
}
return 0;
}
long long ridica(long long nr, int p) {
long long rez = 1;
while (p) {
if (p & 1)
rez = rez * nr % mod;
nr = nr * nr % mod;
p >>= 1;
}
return rez;
}