Cod sursa(job #2467853)

Utilizator DumnezeuSPinzaru Alex DumnezeuS Data 5 octombrie 2019 09:24:26
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
#include <fstream>
#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=1;
    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 and 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(p-1,9971)%Mod;
    }
    fout<<nrdiv<<" "<<sumadiv<<"\n";
}

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


    return 0;
}