Cod sursa(job #2868879)

Utilizator AswVwsACamburu Luca AswVwsA Data 11 martie 2022 11:16:37
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
const int NMAX = 100003, MOD = 9973;
bool c[NMAX];
vector <int> nrp;

void ciur()
{
    nrp.push_back(2);
    for (int i = 3; i * i <= NMAX; i += 2)
        if (!c[i])
            for (int j = i * i; j <= NMAX; j += (i << 1))
                c[j] = 1;
    for (int i = 3; i <= NMAX; i += 2)
        if (!c[i])
            nrp.push_back(i);
}
void desc(ll n, int &nr, ll &sum)
{
    nr = 1, sum = 1;
    for (int i = 0; i < nrp.size() and nrp[i] * nrp[i] <= n; i++)
        if (n % nrp[i] == 0)
        {
            int aux = 0;
            ll s = 1, p = 1;
            while (n % nrp[i] == 0)
            {
                p *= nrp[i];
                p %= MOD;
                s += p;
                s %= MOD;
                n /= nrp[i];
                aux++;
            }
            sum *= s;
            sum %= MOD;
            nr *= aux + 1;
        }
    if (n > 1)
    {
        nr <<= 1;
        sum *= 1LL * (n * n - 1) / (n - 1);
        sum %= MOD;
    }
}
int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");
    ciur();
    int t;
    cin >> t;
    while (t--)
    {
        ll n;
        int nr;
        ll sm;
        cin >> n;
        desc(n, nr, sm);
        cout << nr << " " << sm << "\n";
    }
}