Cod sursa(job #1184510)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 12 mai 2014 23:29:16
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
using namespace std;
#define MAX 1000000
#define RMAX 1000
int v[MAX], t, n, np;
long long s, nd, x, flad, fact;
void ciur();
int main()
{
    int i, p;
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
    scanf("%d", &t);
    ciur();
    while(t--){
        scanf("%lld", &x);
        s = 1; nd = 1;
        for(i=1; x>1; i++){
            p = 0; flad = 1, fact = 1;
            if(v[i]*v[i]>x){
                nd *= 2;
                s *= (x+1);
                x = 1;
            }
            while(x%v[i]==0){
                p++;
                flad = flad*v[i];
                fact += flad;
                x = x/v[i];
            }
            nd *= (p+1);
            s *= fact;
        }
        printf("%lld %lld\n", nd, s);
    }
    return 0;
}
void ciur(){
    int i, j;
    v[++np] = 2;
    for(i=3; i<RMAX; i++)
        if(!v[i]){
            for(j=i*i; j<MAX; j=j+i+i)
                v[j] = 1;
            v[++np] = i;
        }
    for(i=RMAX+1; i<MAX; i=i+2)
        if(!v[i])
            v[++np] = i;
    v[np+1] = MAX+1;
}