Cod sursa(job #2013776)

Utilizator papinub2Papa Valentin papinub2 Data 22 august 2017 13:23:20
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

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

int k, t, nr, s = 1, div = 1;
unsigned long long n;
int OK[1000010], prim[78495];

int calcul (int x, int y)
{
    int s = 1;

    while (y + 1)
    {
        s = s * x;
        y--;
    }

    return (s - 1) / (x - 1);
}

int main()
{
    for (int i = 2; i <= 1000000; i++)
    {
        if (OK[i] == 0)
        {
            for (unsigned long long j = i * i; j <= 1000000; j = j + i)
                OK[j] = 1;

            k++;
            prim[k] = i;
        }
    }

    in >> t;

    for (int i = 1; i <= t; i++)
    {
        in >> n;

        k = 0;
        nr = 0;
        div = 1;
        s = 1;

        while (n != 1)
        {
            nr = 0;

            k++;

            if (n % prim[k] == 0)
            {
                while (n % prim[k] == 0)
                {
                    n = n / prim[k];
                    nr++;
                }

                div = div * (nr + 1);
                s = s * calcul (prim[k], nr);
            }
        }

        out << div << ' ' << s << '\n';
    }

    return 0;
}