Cod sursa(job #2206219)

Utilizator PogonetPogonet Artiom Pogonet Data 21 mai 2018 20:21:56
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#include<cmath>
using namespace std;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
#define NMAX 1000000
int n , a[NMAX] , k , rez = 1 , fin , val , t, x , p , div = 1;
bool v[NMAX];
int main ()
{
    f >> t;
    a[++k] = 2;
    for (int i = 2; i <= NMAX; i = i + 2)
        v[i] = 1;
    for (int i = 3; i <= NMAX; i = i + 2)
    {
        if (v[i] == 0)
        {
            a[++k] = i;
            for (int j = i + i; j <= NMAX; j = j + i)
                v[j] = 1;
        }
    }
    for (int i =1 ; i <= t; ++i)
    {
        f >> x; int dubl = x; int ok = 1;
        while (x != 1 && ok)
        {
            for (int j = 1; j <= x && ok; ++j)
            {
                p = 0;
                while (dubl % a[j] == 0)
                {
                    p = p + 1;
                    dubl = dubl / a[j];
                }
                if (dubl == 1) ok = 0;
                div = div * (p + 1);
                val = pow (a[j] , p + 1);
                fin = (val - 1 ) / (a[j] - 1);
                rez = rez * fin;
            }
        }
        if (rez == x)
            g << 2 << ' ' <<  rez + 1 << '\n';
        else
            g << div << ' ' <<  rez << '\n';
        rez = 1; div = 1;
    }
    g.close ();
    return 0;
}