Pagini recente » Cod sursa (job #1936041) | Cod sursa (job #1102406) | Cod sursa (job #1300784) | Cod sursa (job #330319) | Cod sursa (job #2673785)
#include <fstream>
#include <vector>
const int N = 1e6;
const int mod = 9973;
std::vector<int>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();
int t, n;
fin >> t;
while (t--) {
fin >> n;
int sdiv = 1, nr = 1, k = 0;
for (int x : p) {
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 = prod(nr, k + 1);
}
if (n == 1) break;
}
if (n - 1) {
sdiv = prod(sdiv, prod(sum(putlog(n, 2), -1), inv(n - 1)));
nr = prod(nr, 2);
}
fout << nr << " " << sdiv << "\n";
}
}