Pagini recente » Cod sursa (job #408941) | Cod sursa (job #1714994) | Circulatie | Cod sursa (job #3237158) | Cod sursa (job #3284344)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool fr[1000005];
long long t, n;
vector<long long> v;
long long Putere(long long x, long long e) {
long long a = 1;
while (e != 0) {
if (e % 2 == 1) a = (a * x) % 9973;
x = (x * x) % 9973;
e /= 2;
}
return a;
}
void Descompunere(long long t) {
long long divizori = 1, suma = 1;
for (int i = 0; i < v.size() && v[i] * v[i] <= t; ++i) {
long long d = v[i];
if (t % d == 0) {
long long p = 0;
while (t % d == 0) {
p++;
t /= d;
}
divizori *= (p + 1);
suma = (suma * ((Putere(d, p + 1) - 1 + 9973) % 9973 * Putere(d - 1, 9971)) % 9973) % 9973;
}
}
if (t > 1) {
divizori *= 2;
suma = (suma * ((Putere(t, 2) - 1 + 9973) % 9973 * Putere(t - 1, 9971)) % 9973) % 9973;
}
fout << divizori << " " << suma << "\n";
}
int main() {
long long i, j;
fr[0] = fr[1] = true;
for (i = 2; i * i <= 1000000; i++)
if (!fr[i])
for (j = i * i; j <= 1000000; j += i)
fr[j] = true;
for (i = 2; i <= 1000000; i++)
if (!fr[i])
v.push_back(i);
fin >> t;
for (i = 1; i <= t; i++) {
fin >> n;
Descompunere(n);
}
fin.close();
fout.close();
return 0;
}