Cod sursa(job #2592872)

Utilizator ZarisZaris Neamtiu Zaris Data 2 aprilie 2020 16:06:32
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 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;

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

    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);
}

void rezolva(int a)
{
    int d = 2;
    int sdiv = 1;
    int nrdiv = 1;
    int exp;

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

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

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

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

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

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