Cod sursa(job #2631998)

Utilizator UpgradeStrikeMurgilas Mihai-Rares UpgradeStrike Data 1 iulie 2020 20:04:26
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

unsigned long long p[100005],exp[100005];
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int main()
{
    int a,b;
    in>>a;
    for(b=1;b<=a;b++)
    {
        unsigned long long n,c,d,i,nd=1,sd=1;
        for(i=1;i<100001;i++)
        {
            p[i]=0;
            exp[i]=0;
        }
        in>>n;
        c=n;
        d=2;
        while(c%d==0)
        {
            p[1]=d;
            c/=d;
            exp[1]++;
        }
        if(p[1]==d)
            i=2;
        else
            i=1;
        d=3;
        while(c>1)
        {
            while(c%d==0)
            {
                p[i]=d;
                c/=d;
                exp[i]++;
            }
            if(p[i]==d)
                i++;
            d+=2;
        }
        for(c=1;c<i;c++)
            nd*=exp[c]+1;
        for(c=1;c<i;c++)
        {
            unsigned long long t=1,j;
            for(j=1;j<=exp[c]+1;j++)
                t*=p[c];
            sd*=(t-1)/(p[c]-1);
        }
        out<<nd<<" "<<sd<<endl;
    }
    return 0;
}