Cod sursa(job #1662098)

Utilizator AdrianGotcaAdrian Gotca AdrianGotca Data 24 martie 2016 14:52:59
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

long long prim[15000];
char c[1000005];
void ciur();
void solve(long long);
long long n,x;
int main(){
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%lld",&n);
    ciur();
    for (long long i=1;i<=n;i++){
        scanf("%lld",&x);
        solve(x);
    }
}

void solve(long long x){
    long long e=0,d=1;
    long long nr=1,s=1;
    while (prim[d]*prim[d]<=x){
        long long p=1;
        while (x%prim[d]==0){
            x/=prim[d];
            p*=prim[d];
            e++;
        }
        if (e){
            nr*=e+1;
            s*=(p*prim[d]-1)/(prim[d]-1);
        }
        d++;
    }
    if (x>1){
        nr*=2;
        s*=(x*x-1)/(x-1);
    }
    printf("%lld %lld\n",nr,s);
}

void ciur(){
    for (long long i=2;i<=1000000;i++){
        if (!c[i]){
            prim[++prim[0]]=i;
        }
        for (long long j=i*i;j<=1000000;j+=i){
            c[j]=1;
        }
    }
}