Cod sursa(job #2467851)

Utilizator Rares5000Baciu Rares Rares5000 Data 5 octombrie 2019 09:23:14
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 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)
{
    int p;
    for(p = 1; n > 0 ; n/=2)
    {
        if(n%2 ==1)
            p = 1LL* p * a % Mod;
        a = a * a % Mod;
    }
    return p;
}
void Descompunere(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 = 1LL  * 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(n-1,9971) % Mod;
    }
    fout << nrDiv << " " << sumaDiv << "\n";
}

int main()
{
    long long n;
    int T;
    fin >> T;
    while(T--)
    {
        fin >> n;
        Descompunere(n);
    }
    fin.close();
    fout.close();
    return 0;
}