Cod sursa(job #2609953)

Utilizator razvan44Sfechis Razvan razvan44 Data 3 mai 2020 20:59:24
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

using namespace std;

bool prim[1001];

void Ciur();

unsigned long long power(int b, int e)
{
    if (e == 0) return 1;

    unsigned long long P = power(b, e / 2) * power(b, e / 2);

    if (e % 2 == 0) return P;
    else
        return b * P;
}

int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");

    int t, nd;
    unsigned long long n, Sd;

    Ciur();

    cin >> t;
    for (; t; --t)
    {
        cin >> n;
        Sd = 1; nd = 1;

        int d = 2;
        unsigned long long x = n;
        while (n > 1 && d * d <= x)
        {
            if (prim[d])
            {
                int cnt = 0;
                while (n % d == 0)
                {
                    n /= d;
                    cnt++;
                }

                nd *= (cnt + 1);
                Sd *= ((power(d, cnt + 1) - 1) / (d - 1));
            }

            if (d == 2) d = 3;
            else d += 2;
        }

        if (n != 1)
            cout << 2 << ' ' << n + 1 << '\n';
        else
            cout << nd << ' ' << Sd << '\n';
    }
}

void Ciur()
{
    for (int i = 2; i <= 1000; ++i)
        prim[i] = 1;

    for (int i = 2; i <= 32; ++i)
        for (int j = 2; i * j <= 1000; ++j)
            prim[i * j] = 0;
}