Pagini recente » Cod sursa (job #2976742) | Cod sursa (job #2031696) | Cod sursa (job #1766616) | Cod sursa (job #2389958) | Cod sursa (job #1812357)
#include <iostream>
//autismul se manifesta prin cai misterioase
const int MAX_N = 1000000;
const int MOD = 9973;
bool ciur[1+MAX_N];
int top;
int prime[MAX_N];
int prec[MOD];
int putere(int baza, int exp) {
int ac;
ac = 1;
while(exp > 0) {
if(exp % 2 == 1)
ac = ac * baza % MOD;
exp = exp / 2;
baza = baza * baza % MOD;
}
return ac;
}
int inv(int a, int b) {
return putere(a, b - 2);
}
int main() {
int t, fact, div, s, fr;
long long x;
for(int d = 2; d * d <= MAX_N; ++d)
if(!ciur[d])
for(int i = d * d; i <= MAX_N; i = i + d)
ciur[i] = true;
for(int i = 2; i <= MAX_N; ++i)
if(!ciur[i]) {
prime[top] = i;
top++;
}
for(int i = 1; i < MOD; ++i)
prec[i] = inv(i, MOD);
FILE *fin = fopen("ssnd.in", "r");
FILE *fout = fopen("ssnd.out", "w");
fscanf(fin, "%d", &t);
for(int i = 0; i < t; ++i) {
fscanf(fin, "%lld", &x);
int j = 0;
div = 1;
s = 1;
while(j < top && (long long)prime[j] * prime[j] <= x) {
fr = 1;
fact = 0;
while(x % prime[j] == 0) {
x = x / prime[j];
fact++;
}
fr = (putere(prime[j] % MOD, fact + 1) - 1 + MOD) % MOD * prec[prime[j] % MOD - 1] % MOD;
s = s * fr % MOD;
div = div * (1 + fact);
j++;
}
if(x > 1) {
div = div * 2;
fr = (x + 1) % MOD;
s = s * fr % MOD;
}
fprintf(fout, "%d %d\n", div, s);
}
fclose(fin);
fclose(fout);
return 0;
}