Cod sursa(job #2467852)

Utilizator pishcotMiruna Turbatu pishcot Data 5 octombrie 2019 09:24:19
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <bits/stdc++.h>
#define MOD 9973
using namespace std;

ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

bitset<1000005> ciur;

//void Ciur()
//{
//    ciur[0] = ciur[1];
//    for(int i = 4; i <= 1000000; i += 2)
//        ciur[i] = 1;
//    for(
//}
int Phi(long long n)
{
    int sol, p;
    sol = n;
    for(p = 2; n > 1 && p * p <= n; p++)
    {
        if(n % p == 0)
        {
            sol = sol / p * (p - 1);
            while(n % p == 0)
                n /= p;
        }
    }
    if(n > 1) sol = sol / n * (n - 1);
    return sol;
}

long long lgput(long long a, long long n)
{
    int p = 1;
    while(n)
    {
        if(n % 2 == 1) p = p * a % MOD;
        n /= 2;
        a = a * a % MOD;
    }
    return p;
}

void Descompunere(long long n)
{
    long long p, e, nrDiv = 1, sumDiv = 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);
            sumDiv = 1LL * sumDiv * (lgput(p, e + 1) - 1 + MOD)
                    * lgput(p - 1, 9971) % MOD;
        }
    if(n > 1)
    {
        nrDiv *= 2;
        sumDiv = 1LL * sumDiv * (n * n - 1 + MOD)
            * lgput(n - 1, 9971) % MOD;
    }
    fout << nrDiv << " " << sumDiv << "\n" ;


}

int t;
long long n;


int main()
{
    fin >> t;
    for(int i = 1; i <= t; i++)
    {
        fin >> n;
        Descompunere(n);
    }
    return 0;
}