Cod sursa(job #1928600)

Utilizator andraSaceliAndra Saceli andraSaceli Data 16 martie 2017 15:50:34
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<cstdio>
#include<cmath>
using namespace std;
inline long long my_pow(int b,int e)
{
    long long rez=1;
    for(int i=1; i<=e; ++i)
        rez*=b;
    return rez;
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    int t,lim,n,e;
    long long s,d,nrd;
    scanf("%d",&t);
    for(int i=1; i<=t; i++)
    {
        scanf("%d",&n);
        lim=(int)sqrt((double)n);
        s=1;
        d=2;
        nrd=1;
        while(n>1 && d<=lim)
        {
            e=0;
            while(n>0 && n%d==0)
            {
                n=n/d;
                e++;
            }
            nrd*=(e+1);
            if(e)
                s*=1LL*(my_pow(d,e+1)-1)/(d-1);
            d++;
        }
        if(n>1)
        {
            nrd*=2;
            s*=1LL*(n*n-1)/(n-1);
        }
        printf("%lld %lld\n",nrd,s);
    }
    return 0;
}