Cod sursa(job #1612793)
| Utilizator | Data | 25 februarie 2016 00:57:08 | |
|---|---|---|---|
| Problema | Suma si numarul divizorilor | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.78 kb |
#include <cstdio>
int T;
long long N;
long long NRD, SUMD;
int main () {
freopen ("ssnd.in", "r", stdin);
freopen ("ssnd.out", "w", stdout);
scanf ("%d", &T);
while (T--) {
scanf ("%lld", &N);
NRD = SUMD = 1;
long long f = 2;
while (f * f <= N) {
long long flap = 1;
long long p = 0;
while (N % f == 0) {
N /= f;
flap *= f;
p++;
}
NRD *= (p + 1);
SUMD *= ((flap * f) - 1) / (f - 1);
f++;
}
if (N != 1) {
NRD *= 2;
SUMD *= ((N * N) - 1) / (N - 1);
}
printf ("%lld %lld\n", NRD, SUMD);
}
return 0;
}
