Cod sursa(job #1975604)

Utilizator papinub2Papa Valentin papinub2 Data 1 mai 2017 15:04:36
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;

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

int k, t, nr, nr_div, prod = 1, s = 1;
int divizor;
unsigned long long n;
int OK[1000000], p[1000000];

int putere (int a, int b)
{
    int w = 1;

    while (b)
    {
        w = w * a;
        b--;
    }

    return w;
}

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++;
            p[k] = i;
        }
    }

    in >> t;

    k = 1;

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

      in >> n;

    while (n != 1)
    {


        if (n % p[k] == 0)
        {
            nr++;
            divizor = p[k];

            while (n % p[k] == 0)
            {
                nr_div++;
                n = n / p[k];
            }

             prod = prod * (nr_div + 1);
             k++;

             s = s * (putere(divizor, nr_div + 1) - 1) / (divizor - 1);
             nr_div = 0;
        }

        else

            k++;
    }

        out << prod << ' ' << s << '\n';
        nr = 0;
        k = 1;
        nr_div = 0;
        prod = 1;
        s = 1;

    }

    return 0;
}