Pagini recente » Cod sursa (job #931885) | Cod sursa (job #691817) | Cod sursa (job #1306629) | Cod sursa (job #503232) | Cod sursa (job #1472789)
#include <stdio.h>
#define ll long long
#define N 1000000
#define MAX 80000
#define R 9973
int n, i, j, nprim[MAX], div, d;
bool prim[N];
ll x, aux, nr, sum;
void ciur(){
for(i = 2; i < N; i++)
if(!prim[i]){
nprim[++nprim[0]] = i;
for(j = 2 * i; j < N; j += i)
prim[j] = 1;
}
}
int putlog(int x, int n);
void ssnd(ll x);
int main(){
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
ciur();
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%lld", &x);
ssnd(x);
}
return 0;
}
int putlog(int x, int n){
int rez = 1;
x %= R;
while(n > 0){
if(n & 1)
rez = rez * x % R;
n >>= 1;
x = x * x % R;
}
return rez;
}
void ssnd(ll x){
int i = 1;
nr = 1;
sum = 1;
aux = x;
while((ll)nprim[i] * nprim[i] <= x && i <= nprim[0]){
if(x % nprim[i] == 0){
div = nprim[i];
d = 1;
while(aux % div == 0){
aux /= div;
d++;
}
nr *= d;
sum = (sum * (putlog(div, d) - 1) % R) * putlog(div - 1, R - 2) % R;
}
i++;
}
if(aux != 1){
nr *= 2;
sum = sum * ((aux * aux - 1) / (aux - 1)) % R;
}
printf("%lld %lld\n", nr, sum);
}