Cod sursa(job #3342087)

Utilizator Sabin1133Padurariu Sabin Sabin1133 Data 22 februarie 2026 18:40:41
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>

#define NMAX 1000005
#define MOD 9973

int fast_pow(int base, int exp)
{
    int product = 1;

    while (exp) {
        if (exp & 1)
            product = (1LL * product * base) % MOD;

        base = (1LL * base * base) % MOD;
        exp >>= 1;
    }

    return product;
}

int main()
{
    int n;
    long long a;
    int cnt, sum;
    bool sieve[NMAX];

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

    for (int i = 2; i < NMAX; ++i)
        sieve[i] = true;

    sieve[2] = false;

    for (int i = 2; i < NMAX; ++i)
        if (sieve[i])
            for (int j = i + i; j < NMAX; j += i)
                sieve[j] = false;

    std::cin >> n;

    for (int i = 0; i < n; ++i) {
        std::cin >> a;

        cnt = 1;
        sum = 1;

        for (int d = 2, e; 1LL * d * d <= a; ++d) {
            if (!sieve[d])
                continue;

            if (a % d)
                continue;

            e = 0;

            while (a % d == 0) {
                a /= d;
                
                ++e;
            }

            cnt = (1LL * cnt * (e + 1)) % MOD;
            sum = (((1LL * sum * ((fast_pow(d, e + 1) - 1 + MOD) % MOD)) % MOD) * (fast_pow(d - 1, MOD - 2) % MOD)) % MOD;
        }

        if (a > 1) {
            cnt = (1LL * cnt * 2) % MOD;
            sum = (1LL * sum * (a + 1)) % MOD;
        }

        std::cout << cnt << ' ' << sum << '\n';
    }

    return 0;
}