Cod sursa(job #2423341)

Utilizator blotucosmincosmin blotucosmin Data 21 mai 2019 09:18:53
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define MOD 9973
using namespace std;
long long n, x, d, nrdiv, sumdiv, val, fm;
unsigned long long lgput(unsigned long long n, unsigned long long p)
{
    if(p == 0)return 1;
    if(p == 1)return n;
    long long x = lgput(n, p / 2);
    if(p % 2 == 0)return x * x;
    if(p % 2 == 1)return x * x * n;
}
int main()
{
    ifstream f("ssnd.in");
    ofstream g("ssnd.out");
    f >> n;
    while(n --)
    {
        f >> x;
        d = 2;
        nrdiv = sumdiv = 1;
        do
        {
            fm = 0;
            while(x % d == 0)
            {
                x = x / d;
                fm ++;
            }
            if(fm > 0)
            {
                nrdiv = nrdiv * (fm + 1);
                val = lgput(d, fm + 1);
                sumdiv = (sumdiv * (val - 1) / (d - 1) ) % MOD;
            }
            d ++;
            if(d * d > x && x > 1)
            {
                nrdiv = nrdiv * 2;
                sumdiv = (sumdiv * (x * x - 1) / (x - 1)) % MOD;
                x = 1;
            }
        }
        while(x > 1);
        g << nrdiv << " " << sumdiv << "\n";
    }
    return 0;
}