Cod sursa(job #2575150)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 6 martie 2020 11:52:16
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>
#define mod 9973

using namespace std;

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

void usain_bolt()
{
    ios::sync_with_stdio(false);
    fin.tie(0);
}

const int N = 1e6 + 5;

vector < int > prime;
bool composite[N];

void ciur()
{
    for(int i = 2; i <= 1e6; ++i) {
        if(composite[i] == false) prime.push_back(i);
        for(int j = 0; j < prime.size() && i * prime[j] <= 1e6; ++j) {
            composite[i * prime[j]] = true;
            if(i % prime[j] == 0) break;
        }
    }
}

long long pwr(long long a, long long b)
{
    long long sol = a;
    while(b > 0) sol = (sol * a) % mod, --b;
    return sol;
}

int main()
{
    usain_bolt();

    ciur();


    int tt;

    fin >> tt;
    for(; tt; --tt) {
        long long n, sum_divs = 1;
        int divs = 1;

        fin >> n;
        for(int i = 0; i < prime.size() && 1LL * prime[i] * prime[i] <= n; ++i) {
            int e = 0;
            if(n % (1LL * prime[i]) == 0) {
                while(n % (1LL * prime[i]) == 0) n /= (1LL * prime[i]), ++e;
            }
            divs *= (e + 1);
            if(e > 0) sum_divs = (sum_divs * (pwr(1LL * prime[i], 1LL * e) - 1LL) / (1LL * prime[i] - 1LL)) % mod;
        }
        if(n > 1) {
            divs *= 2;
            sum_divs = (sum_divs * (pwr(1LL * n, 1LL) - 1LL) / (n - 1LL)) % mod;
        }
        fout << divs << " " << sum_divs << "\n";
    }
    return 0;
}