Cod sursa(job #1771196)

Utilizator razvan242Zoltan Razvan-Daniel razvan242 Data 5 octombrie 2016 12:49:17
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

const long long MOD = 9973;

inline long long power(long long a, long long b) {
    long long ans = 1;
    if (a < 2)
        return a;
    for (long long i = 0; (1LL << i) <= b; ++i) {
        if (b & (1LL << i)) {
            ans = (ans * a) % MOD;
        }
        a = (a * a) % MOD;
    }
    return ans % MOD;
}

inline void solve() {
    long long n;
    fin >> n;
    long long d = 2, e;
    long long s = 1, nr = 1;
    long long a, b;
    while (n > 1) {
        e = 0;
        while (n % d == 0) {
            ++e;
            n /= d;
        }
        nr = ((nr % MOD) * ((e + 1) % MOD)) % MOD;
        a = (power(d, e + 1) + MOD - 1) % MOD;
        b = power(d - 1, MOD - 2);
        s = ((s % MOD) * (a % MOD) * (b % MOD)) % MOD;
        if (d * d > n) {
            d = n;
        }
        else {
            if (d == 2)
                ++d;
            else
                d += 2;
        }
    }
    fout << nr << ' ' << s << '\n';
}

int main()
{
    long long t;
    for (fin >> t; t; --t) {
        solve();
    }
    return 0;
}