Cod sursa(job #2930027)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 27 octombrie 2022 12:47:07
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

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

#define int long long

int t,n;
bool sieve[1000005];
vector<int>primes;

void ciur()
{
    sieve[0] = sieve[1] = true;
    for (int i = 2; i * i <= 1000000; i++)
        if (!sieve[i])
            for (int j = i * i; j <= 1000000; j += i)
                sieve[j] = true;
    for (int i = 2; i <= 1000000; i++)
        if (!sieve[i])
            primes.push_back(i);
}

signed main()
{
    ciur();
    in >> t;
    while (t--)
    {
        in >> n;
        vector<int>f,e;
        for (int i = 0; primes[i] * primes[i] <= n; i++)
        {
            if (n % primes[i] == 0)
            {
                f.push_back(primes[i]);
                int exp = 0;
                while (n % primes[i] == 0)
                    exp++,n /= primes[i];
                e.push_back(exp);
            }
        }
        if (n != 1)
        {
            f.push_back(n);
            e.push_back(1);
        }
        int nrd = 1;
        for (int i = 0; i < e.size(); i++)
            nrd *= (e[i] + 1);
        out << nrd << ' ';
        int prod = 1,modulo = 9973;
        for (int i = 0; i < f.size(); i++)
        {
            int act = 1;
            for (int j = 0; j <= e[i]; j++)
                act *= f[i];
            act--;
            act /= (f[i] - 1);
            act %= modulo;
            prod *= act;
            prod %= modulo;
        }
        out << prod << '\n';
    }
    return 0;
}