Cod sursa(job #2467854)

Utilizator NeganAlex Mihalcea Negan Data 5 octombrie 2019 09:26:15
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#define Mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long long Put(int a, long long n)
{
    long long p = 1;
    while(n > 0)
    {
        if(n % 2 == 1)
            p = 1LL * p * a % Mod;
        n /= 2;
        a = 1LL * a * a % Mod;
    }
    return p;
}
void Desc(int n)
{
    long long p, e, nrdiv = 1, sumdiv = 1;
    for(p = 2;p * p <= n && n > 1;p++)
    {
        e = 0;
        while(n % p == 0)
        {
            e++;
            n /= p;
        }
        nrdiv *= (e + 1);
        sumdiv = sumdiv * (Put(p, e + 1) % Mod) - 1 + Mod)
        * Put(p - 1, 9971) % Mod;
    }
    if(n > 1)
    {
        nrdiv *= 2;
        sumdiv *= sumdiv * (n * n - 1 + Mod) * Put(n - 1, 9971) % Mod;
    }
    fout << nrdiv << " " << sumdiv << "\n";
}
int a, n, T;
int main()
{
    fin >> T;
    while(T--)
    {
        fin >> n;
        Desc(n);
    }
    return 0;
}