Cod sursa(job #2592879)

Utilizator ZarisZaris Neamtiu Zaris Data 2 aprilie 2020 16:12:55
Problema Suma si numarul divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
using namespace std;

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

int expLog(int a, int b);
void rezolva(int a);

int main()
{
    int n, div;

    fin >> n;

    int d;
    int sdiv;
    int nrdiv;
    int exp;

    for(int i = 1; i <= n; ++i)
    {
        fin >> div;

        d = 2;
        sdiv = 1;
        nrdiv = 1;

        while(div != 1)
        {
            exp = 0;

            while(div % d == 0)
            {
                div = div / d;
                exp++;
            }

            nrdiv = nrdiv * (exp + 1);
            sdiv = ((sdiv % 9973) * (((expLog(d, exp + 1) - 1) / (d - 1)) % 9973)) % 9973;

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

            if(d * d > div)
                d = div;
        }

        fout << nrdiv << ' ' << sdiv << '\n';
    }

    fin.close();
    fout.close();

    return 0;
}

int expLog(int a, int b)
{
    if(b == 1)
        return a;

    else if(b % 2 == 0)
        return expLog(a * a, b / 2);

    else return a * expLog(a * a, b / 2);
}