Cod sursa(job #3346485)

Utilizator RuxandraPro12_Metehau Ruxandra Maria RuxandraPro12_ Data 13 martie 2026 21:21:00
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 1e6, MOD = 9973;

int t, prime[N_MAX / 3], m;

long long n;

bitset <N_MAX + 5> ciur;

void Ciur () {
    ciur[0] = ciur[1] = 1;
    for (int i = 2; i <= N_MAX; i++) {
        if (!ciur[i]) {
            prime[++m] = i;
            for (int j = i * 2; j <= N_MAX; j += i)
                ciur[j] = 1;
        }
    }
}

int putere (long long a, int b) {
    int p = 1;
    while (b != 0) {
        int cif = b % 2;
        if (cif)
            p = 1LL * p * a % MOD;
        a = 1LL * a * a % MOD;
        b /= 2;
    }
    return p;
}

void solve (long long n) {
    int d = 1, nr_divizori = 1, suma_divizori = 1;
    while (prime[d] * prime[d] <= n && d <= m) {
        int e = 0;
        while (n % prime[d] == 0) {
            n /= prime[d];
            e++;
        }
        nr_divizori = 1LL * nr_divizori * (e + 1) % MOD;
        if (e != 0)
            suma_divizori = 1LL * suma_divizori * putere (prime[d] - 1, MOD - 2) % MOD * (putere(prime[d], e + 1) - 1 + MOD) % MOD;
        d++;
    }
    if (n != 1) {
        nr_divizori = 1LL * nr_divizori * 2 % MOD;
        suma_divizori = 1LL * suma_divizori * putere (n - 1, MOD - 2) % MOD * (putere(n, 2) - 1 + MOD) % MOD;
    }
    fout << nr_divizori << " " << suma_divizori << "\n";
}

int main() {
    Ciur();
    fin >> t;
    while (t--) {
        fin >> n;
        solve (n);
    }
    return 0;
}