Pagini recente » Cod sursa (job #2451975) | Cod sursa (job #592780) | Cod sursa (job #1989113) | Cod sursa (job #2301002) | Cod sursa (job #2441605)
#include <fstream>
#define nmax 1000005
#define moduletz 9973
using namespace std;
ifstream cin ("ssnd.in");
ofstream cout("ssnd.out");
int p[nmax]; bool ciur[nmax];
long long n, k = 0;
void sieve() {
for (int i = 4; i <= nmax; i += 2)
ciur[i] = true;
p[++k] = 2;
for (int i = 3; i <= nmax; i += 2) {
if (!ciur[i]) {
p[++k] = i;
for (int j = i + i; j <= nmax; j += i)
ciur[j] = true;
}
}
}
inline int log_pow(int baza, int exponent) {
int result = 1;
baza %= moduletz;
for (; exponent; exponent >>= 1) {
if (exponent & 1) {
result *= baza;
result %= moduletz;
}
baza *= baza;
baza %= moduletz;
}
return result;
}
void invers_modular(int a, int b, int &x, int &y) {
if (!b) {
x = 1;
y = 0;
}
else {
int x0, y0;
invers_modular(b, a % b, x0, y0);
x = y0;
y = x0 - (a / b) * y0;
}
}
void solve(long long number) {
int nr_d = 1, sum_d = 1;
for (int i = 1; i <= k && p[i] * p[i] <= number; i++) {
if (number % p[i] == 0) {
int pi = 0;
while (number % p[i] == 0) {
number /= p[i];
pi++;
}
nr_d *= (pi + 1);
int numarator, invers_numitor, xx;
numarator = (log_pow(p[i], pi + 1) - 1) % moduletz;
//cout << numarator << "\n";
invers_modular(p[i] - 1, moduletz, invers_numitor, xx);
//cout << p[i] - 1 << " " << invers_numitor << "\n";
if (invers_numitor < 0) invers_numitor = moduletz + invers_numitor % moduletz;
sum_d = (((sum_d * numarator) % moduletz) * invers_numitor) % moduletz;
}
}
if (number > 1) {
nr_d *= 2;
sum_d = (1ll * sum_d * (number + 1) % moduletz);
}
cout << nr_d << " " << sum_d << "\n";
}
int main() {
sieve();
int t;
cin >> t;
while (t--) {
cin >> n;
solve(n);
}
}