Cod sursa(job #1317049)

Utilizator tudorcomanTudor Coman tudorcoman Data 14 ianuarie 2015 14:58:01
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#define LL long long
using namespace std;
struct VAR
{
    LL nrd,sd;
}k;
void magic (LL n,VAR& ans)
{
    ans.nrd = 1;
    ans.sd=1;
    LL div = 2;
    LL exp = 0;
    LL aux  = 0;
    while(div*div<=n)
    {
        exp = 0;
        aux = 1;
        while(n%div==0)
        {
            n/=div;
            aux*=div;
            ++exp;
        }
        if(exp)
        {
            aux*=div;
            aux = (aux-1)/(div-1);
            ans.nrd = ans.nrd * (exp+1);
            ans.sd = ans.sd * aux;
        }
        ++div;
    }
    if(n>1)
    {
        div = n;
        aux = n*n;
        aux = (aux-1)/(div-1);
        ans.nrd = ans.nrd * 2;
        ans.sd = ans.sd * aux;
    }
}
int main()
{
    freopen ("ssnd.in","r",stdin);
    freopen ("ssnd.out","w",stdout);
    LL t,n;
    scanf("%lld",&t);
    for(int i = 1;i<=t;++i)
    {
        scanf("%lld",&n);
        k.sd=1;
        k.nrd=1;
        magic(n,k);
        printf("%lld %lld\n",k.nrd,k.sd);
    }
    return 0;
}