Cod sursa(job #3301332)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 24 iunie 2025 17:59:51
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int NMAX = 100001, VMAX = 1000001, MOD = 9973;
bool prime[VMAX];
int nrPrime[NMAX], catePrime = 0;

void ciur(int N)
{
    for (int i = 2; i * i <= N; i++)
    {
        if (prime[i] == 0)
        {
            for (int j = i * i; j <= N; j += i)
            {
                prime[j] = 1;
            }
        }
    }
    /// am calculat in vectorul prime pentru fiecare nr daca e prim sau nu
    for (int i = 2; i <= N; i++)
    {
        if (prime[i] == 0)
        {
            nrPrime[++catePrime] = i;
        }
    }
}

int main()
{
    ciur(VMAX - 1);
    int T;
    f >> T;
    while (T--)
    {
        long long N;
        long long sumaDiv = 1, nrDiv = 1;
        f >> N;
        for (int i = 1; 1LL * nrPrime[i] * nrPrime[i] <= N; i++)
        {
            if (N % nrPrime[i] == 0)
            {
                int exp = 0;
                long long pk = 1;
                while (N % nrPrime[i] == 0)
                {
                    N /= nrPrime[i];
                    exp++;
                    pk *= nrPrime[i];
                }
                /// pk = nrPrime[i] ^ k
                nrDiv *= (exp + 1);
                sumaDiv = sumaDiv * (pk * nrPrime[i] - 1) / (nrPrime[i] - 1) % MOD;
            }
        }
        if (N > 1)
        {
            /// mai exista un factor prim
            /// N ^ 1, N - prim
            nrDiv *= 2;
            sumaDiv = sumaDiv * (N + 1) % MOD;
        }
        g << nrDiv << ' ' << sumaDiv << '\n';
    }

    return 0;
}