Cod sursa(job #2982106)

Utilizator Tataru_MirunaTataru Miruna-Alexia Tataru_Miruna Data 19 februarie 2023 16:08:07
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <bits/stdc++.h>
using namespace std;

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

bool v[1000001];

int main()
{
    long long int n, x, nr_putere = 0, numar_div = 1, suma_divizori = 1, produs1 = 1, copie;

    v[0] = v[1] =  true;
    for(int i = 4; i <= 1000001; i += 2)
    {
        v[i] = true;
    }

    for(long long int i = 3; i <= 1000001/2; i += 2)
    {
        for(long long int j = i * i; j <= 1000001; j = j + 2 * i)
            v[j] = true;
    }

    fin >> n;
    for(long long int i = 1; i <= n; i++)
    {
        fin >> x;
        numar_div = 1;
        suma_divizori = 1;
        if(v[x] == false)
        {
            fout << 2 <<" " << x+1 <<'\n';
        }
        else
        {
            for(long long int j = 1; j * j <= x; j++)
            {
                copie = x;
                if(v[j] == false && copie % j == 0)
                {
                    nr_putere = 0;
                    while(copie % j == 0)
                    {
                        nr_putere++;
                        copie = copie / j;

                    }
                    numar_div = numar_div * (nr_putere + 1);
                    produs1 = 1;
                    while(nr_putere + 1)
                    {
                        produs1 = produs1 * j;
                        nr_putere--;
                    }
                    suma_divizori =suma_divizori * ((produs1 - 1) / (j - 1));
                }
            }
            fout << numar_div << " " << suma_divizori <<'\n';
        }
    }


}