Cod sursa(job #2633944)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 9 iulie 2020 11:57:16
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout("ssnd.out");
int nrp,prim[1000002];
bool ap[1000002];

void ciur (int n)
{
    int i,j;
    prim[++nrp]=2;
    for (i=3;i*i<=n;i+=2)
        if (ap[i]==0)
    {
        prim[++nrp]=i;
        for (j=i*i;j<=n;j+=i)
            ap[j]=1;
    }
    for (;i<=n;i+=2)
        if (ap[i]==0)
            prim[++nrp]=i;
}

void rez (long long x)
{
    int i;
    long long nd=1,sd=1;
    for (i=1;i<=nrp && prim[i]*prim[i]<=x;++i)
    {
        int exp=0;
        while (x%prim[i]==0)
            ++exp,x/=prim[i];
        nd=nd*(exp+1);
        sd=sd*(pow(prim[i],exp+1)-1)/(prim[i]-1);
    }
    if (x>1)
    {
        nd*=2;
        sd=sd*(x*x-1)/(x-1);
    }
    fout<<nd<<' ' <<sd<<'\n';
}

int main()
{
    int t;
    long long x;
    fin>>t;
    ciur(1000000);
    for (;t>0;--t)
    {
        fin>>x;
        rez(x);
    }
    return 0;
}