Cod sursa(job #2565314)

Utilizator serafimalex2001Serafim Alex serafimalex2001 Data 2 martie 2020 13:37:12
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int t;

const int MOD = 9973;

long long Exp(int n, int p)
{
    if(p == 0)
        return 1;
    if(p%2 == 0)
    {
        long long P = Exp(n,p/2)%MOD;
        return P*P%MOD;
    }
    else
    {
        long long P = Exp(n,p/2)%MOD;
        return P*P%MOD*n%MOD;
    }
}

long long invers(long long x)
{
    return Exp(x,MOD-2)%MOD;
}

void Do(long x)
{
    int i,j;
    long long power;
    long long inv;
    long long sum = 1;
    long long total_div = 1;
    int ct, d = 2;
    while(x > 1)
    {
        ct = 0;
        while(x % d == 0)
        {
            ct++;
            x/=d;
        }
        if(ct > 0)
        {
            total_div = total_div*(ct+1)%MOD;
            power = Exp(d,ct+1)-1;
            inv = Exp(d-1, MOD-2)%MOD;
            power = power*inv%MOD;
            sum = sum*power%MOD;
        }
        d++;
        if(d*d > x)
            d = x;
    }
    fout<<total_div<<" "<<sum<<"\n";
}

void Read()
{
    int i,j;
    long long x;
    fin>>t;
    for(i=1; i<=t; ++i)
    {
        fin>>x;
        Do(x);
    }
}

int main()
{
    Read();
    return 0;
}