Cod sursa(job #2722426)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 12 martie 2021 20:33:05
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb

#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
const int NMAX=1005;
long long v[NMAX],n;
long long lgput(long long a,long long b)
{
    long long total=1;
    if(b==0)
    return 1;
    else
        {
            if(b%2==0)
            {
                total=lgput(a,b/2);
                total=total*total;
                return total;
            }
            else
            {
                total=lgput(a,b/2);
                total=total*total;
                return total*a;
            }
        }
}
long long nrd(long long n)
{
   long long d=2,p=0,total=1,s=1,ex=1;
    while(n>1)
    {
        p=0;
        while(n%d==0)
        {
            n=n/d;
            p++;
        }
        if(p>0)
        {
            total*=(p+1);
        }
        d++;
        if(d*d>n)
            d=n;
    }
    return total;
}
long long sdivi(long long n)
{
    long long d=2,p=0,s=1,ex=1,k;
    while(n>1)
    {
        k=0;
        p=1;
        while(n%d==0)
        {
            k++;
            n=n/d;
            p=p*d;
        }
        if(k>0)
        {
        s=s*(p*d-1)/(d-1);
        }
        d++;
        if(d*d>n)
            d=n;
    }
    return s/ex;
}
int main()
{
    long long n,a,b,x,i,m;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>m;
        fout<<nrd(m)<<" "<<sdivi(m)<<"\n";
    }
    return 0;
}