Cod sursa(job #2467847)

Utilizator ginaiulianaGina Iuliana ginaiuliana Data 5 octombrie 2019 09:22:17
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define Mod 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long LogP(long long a, long long n)
{
    long long p;
    for(p = 1; n > 0; n/=2)
    {
        if(n % 2 == 1)
            p = p * a % Mod;
        a = a * a % Mod;
    }
    return p;
}

void Descomp(long long n)
{
    long long p , e, nrDiv = 1, sumaDiv = 1;
    for(p = 2; p * p <= n && n > 1; p++)
        if(n % p == 0)
        {
            e = 0;
            while(n % p == 0)
            {
                e++;
                n/=p;
            }
            nrDiv *= (e + 1);
            sumaDiv =  sumaDiv * (LogP(p, e +1) - 1 + Mod)
            * LogP(p - 1, 9971) %Mod;
        }
        if(n > 1)
        {
            nrDiv *= 2;
            sumaDiv = 1LL*sumaDiv * (n * n - 1 + Mod)
                        * LogP(p - 1, 9971) %Mod;
        }
        fout << nrDiv << " " << sumaDiv << "\n";
}

int main()
{
    int t;
    long long n;
    fin >> t;
    while(t--)
    {
        fin >> n;
        Descomp(n);
    }
    return 0;
}