Cod sursa(job #1066401)

Utilizator nytr0gennytr0gen nytr0gen Data 24 decembrie 2013 17:38:59
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
using namespace std;

typedef long long i64;

const i64 MOD = 9973;

inline i64 pow(i64 a, i64 n) {
    i64 x = 1;
    a %= MOD;
    for (; n > 0; n >>= 1) {
        if (n & 1) x = x * a;
        a = a * a;
    }

    return x % MOD;
}

int main() {
    i64 D, S, i, d, n, t;

    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);

    scanf("%lld", &t);
    while (t--) {
        scanf("%lld", &n);
        D = S = 1;
        for (i = 2; i * i <= n; ++i) {
            if (n%i == 0) {
                d = 1;
                while (n%i == 0) {
                    n /= i;
                    ++d;
                }
                D = D * d;
                S = ((pow(i, d)-1)/(i-1) * S) % MOD;
            }
        }

        if (n > 1) {
            D = D * 2;
            S = ((n+1) * S) % MOD;
        }

        printf("%lld %lld\n", D, S);
    }

    return 0;
}