Cod sursa(job #2467848)

Utilizator TudolHulubei Tudor Tudol Data 5 octombrie 2019 09:22:18
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 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=1;
    while(n>0)
    {
        if(n%2==1) p=1LL*p*a%MOD;
        n/=2;
        a=1LL*a*a%MOD;
    }
    return p;
}

void Desc(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+=1;
                n/=p;
            }
            nrdiv*=(e+1);
            sumdiv=1LL*sumdiv*(LogP(p,e+1)-1+MOD)*LogP(p-1,9971)%MOD;
        }
    if(n>1)
    {
        nrdiv*=2;
    sumdiv=1LL*sumdiv*(LogP(n,2)-1)*LogP(n-1,9971)%MOD;
    }
    fout<<nrdiv<<" "<<sumdiv<<"\n";
}

int main()
{
    int T;
    long long n;
    fin>>T;
    while(T--)
    {
        fin>>n;
        Desc(n);
    }
    return 0;
}