Cod sursa(job #1827229)

Utilizator AndreiMaximIonutMaxim Andrei AndreiMaximIonut Data 11 decembrie 2016 16:49:49
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
//#define Nmax 1000001
int t;
//char v[Nmax]
long long n;
/*void ciur(char *v)
{
    long i,j;
    v[0]=v[1]=1;
    for(i=2;i*i<=Nmax;i++)
        if(v[i]==0)
          for(j=i;j*i<=Nmax;j++)
             v[i*j]=1;
}*/
int nrd(long long x)
{
    long d=2,nr=1;
    while(d*d<=x)
    {
        if(x%d==0)
        {
            int e=0;
            while(x%d==0)
                e++,x/=d;
            nr=nr*(e+1);
        }
        d++;
    }
    if(x>1) nr*=2;
    return nr;
}
long long put(long d, int e)
{
    long long x=1;
    int i;
    for(i=1; i<=e+1; i++)
        x=x*d;
    return x;
}
long long sd(long long x)
{
    long long s=1;
    long d=2;
    while(d*d<=x)
    {
        if(x%d==0)
        {
            int e=0;
            while(x%d==0)
                e++,x/=d;
            long long a=put(d,e);

            s=s*((a-1)/(d-1));
        }
        d++;
    }
    if(x>1) s=s*((x*x-1)/(x-1));
    return s;
}
int main()
{
    fin>>t;
    while(t)
    {
        fin>>n;
        fout<<nrd(n)<<' '<<sd(n)<<endl;
        t--;
    }
    return 0;
}