Pagini recente » Cod sursa (job #2165843) | Clasament summer_camp_4 | Cod sursa (job #1612978) | Cod sursa (job #2355678) | Cod sursa (job #1812261)
#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];
void euclid(int a, int b, int *x0, int *y0) {
int x, y;
if(b == 0) {
x = 1;
y = 0;
} else {
euclid(b, a % b, x0, y0);
x = *y0;
y = *x0 - a / b * (*y0);
}
*x0 = x;
*y0 = y;
}
int inv(int a, int b) {
int x, y;
euclid(a, b, &x, &y);
x = x % MOD;
return (x + MOD) % MOD;
}
int main() {
int t, fact, div, s, fr, p;
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 && prime[j] * prime[j] <= x) {
fr = 1;
fact = 0;
p = 1;
while(x % prime[j] == 0) {
x = x / prime[j];
p = p * prime[j] % MOD;
fact++;
}
p = p * prime[j] % MOD;
fr = (p - 1 + MOD) * prec[prime[j] % MOD - 1] % MOD;
s = s * fr % MOD;
div = div * (1 + fact) % MOD;
j++;
}
if(x > 1) {
div = div * 2;
x = x % MOD;
fr = (x * x - 1 + MOD) % MOD * prec[x % MOD - 1] % MOD;
s = s * fr % MOD;
}
fprintf(fout, "%d %d\n", div, s);
}
fclose(fin);
fclose(fout);
return 0;
}