Cod sursa(job #2511385)

Utilizator DavidLDavid Lauran DavidL Data 18 decembrie 2019 21:38:59
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");

const int MOD = 9973;

int t, n;
bool ciur[1000005];
vector <int> prime;

void faCiur() {
    for (int i = 2; i * i < 1000005; i++)
        if (!ciur[i])
            for (int j = i * i; j < 1000005; j += i)
                ciur[j] = 1;
}

void getPrime() {
    for (int i = 2; i < 1000005; i++)
        if (ciur[i] == 0)
            prime.push_back(i);
}

int main()
{
    faCiur();
    getPrime();

    fi >> t;
    while (t--) {
        fi >> n;
        int cnt = 1, suma = 1;
        for (auto x: prime) {
            long long e = 0, p = 1;
            while (n % x == 0) {
                e++;
                p = 1LL * p * x;
                n /= x;
            }
            cnt = 1LL * cnt * (e + 1);
            suma = 1LL * suma * (1LL * p * x - 1) / (x - 1) % MOD;
        }
        if (suma == 1 && n > 1) // prim
            suma = n + 1, cnt = 2;
        fo << cnt << " " << suma << "\n";
    }
    return 0;
}