Pagini recente » Cod sursa (job #1602336) | Cod sursa (job #2867249) | Cod sursa (job #282931) | Cod sursa (job #1285209) | Cod sursa (job #2673789)
#include <fstream>
#include <vector>
#define ll long long
const int N = 1e6;
const int mod = 9973;
std::vector<ll>p;
bool ciur[N+5];
int prod(int a, int b) { return (1LL * a * b) % mod; }
int sum(int a, int b) { return (a + b + mod) % mod; }
void sieve() {
ciur[0] = ciur[1] = 1;
for (int i = 4; i <= N; i += 2) ciur[i] = 1;
for (int i = 3; i * i <= N; i+=2)
if (!ciur[i])
for (int j = i * i; j <= N; j += 2 * i) ciur[j] = 1;
for (int i = 1; i <= N; i++)
if (!ciur[i])
p.push_back(i);
}
int putlog(int n, int k) {
if (k == 0) return 1;
int x = putlog(n, k / 2);
if (k % 2 == 0) return prod(x, x);
return prod(prod(x, x), n);
}
int inv(int n) {
return putlog(n, mod - 2);
}
int main() {
std::ifstream fin("ssnd.in");
std::ofstream fout("ssnd.out");
sieve();
ll t, n;
fin >> t;
while (t--) {
fin >> n;
ll sdiv = 1, nr = 1, k = 0;
for (int i = 0; i < p.size(), n != 1, p[i] * p[i] <= n; i++) {
int x = p[i];
if (n % x == 0) {
k = 0;
while (n % x == 0) n /= x, k++;
sdiv = prod(sdiv, prod(sum(putlog(x, k + 1), -1), inv(x - 1)));
nr *= k + 1;
}
if (n == 1) break;
}
if (n - 1) {
sdiv = prod(sdiv, prod(sum(putlog(n, 2), -1), inv(n - 1)));
nr *= 2;
}
fout << nr << " " << sdiv << "\n";
}
}