Cod sursa(job #2776055)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 18 septembrie 2021 15:39:38
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 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);
}

long long lgput(long long a, long long b)
{
    long long ans = 1;
    while(b > 0) {
        if(b & 1) {
            ans = (ans * a) % mod;
        }
        a = (a * a) % mod;
        b >>= 1;
    }
    return ans;
}

int main()
{
    usain_bolt();

    int n;

    fin >> n;
    for(int i = 1; i <= n; ++i) {
        long long x;

        fin >> x;
        long long divs = 1;
        long long sol = 1;
        for(long long d = 2; d * d <= x; ++d) {
            if(x % d == 0) {
                long long e = 0;
                while(x % d == 0) {
                    x /= d;
                    ++e;
                }
                long long ans = ((lgput(d, e + 1) - 1) / (d - 1)) % mod;
                sol = (sol * ans) % mod;
                divs *= (e + 1);
            }
        }
        if(x > 1) {
            divs *= 2LL;
            long long ans = (lgput(x, 2LL) - 1) / (x - 1);
            sol = (sol * ans) % mod;
        }
        fout << divs << " " << sol << "\n";
    }
    return 0;
}