Pagini recente » Cod sursa (job #120617) | Cod sursa (job #233114) | Cod sursa (job #226315) | Cod sursa (job #950883) | Cod sursa (job #764780)
Cod sursa(job #764780)
/*
Suma si numarul de divizori.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXN 1000000
#define MOD 9973
int t;
int factor_prim[MAXN];
bool prim[MAXN];
void ciur_eratostene () {
int i, j;
int k = 0;
for (i = 2; i < MAXN; i++)
prim[i] = 0;
for (i = 2; i < MAXN; i++) {
if (!prim[i]) {
factor_prim[++k] = i;
for (j = i + i + i; j < MAXN; j += i << 1)
prim[j] = 1;
}
}
}
void sum_div (long long n) {
long long sum_div = 1, nr_div = 1;
long long d, p;
int i = 1;
while (factor_prim[i] * factor_prim[i] <= n) {
if (!(n % factor_prim[i])) {
p = factor_prim[i];
d = 0;
while (!(n % factor_prim[i])) {
d++;
p *= factor_prim[i];
n /= factor_prim[i];
}
nr_div *= (d + 1);
sum_div = (sum_div * (p - 1) / (factor_prim[i] - 1)) % MOD;
}
i++;
}
if (n != 1) {
nr_div *= 2;
sum_div = (sum_div * (n * n - 1) / (n - 1)) % MOD;
}
printf("%lld %lld\n", nr_div, sum_div);
}
int main () {
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
long long n;
int i;
scanf("%d", &t);
ciur_eratostene();
for (i = 0; i < t; i++) {
scanf("%lld", &n);
sum_div(n);
}
return 0;
}