Cod sursa(job #1184535)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 13 mai 2014 00:27:59
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <cstdio>
using namespace std;
#define MAX 1000000
#define RMAX 1000
#define MOD 9973
int v[MAX], t, n, np, nd;
char vc[MAX];
long long s, 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++){
            if(v[i]*v[i]>x){
                nd *= 2;
                s = s*(x+1)%MOD;
                x = 1;
            }
            if(x%v[i]) continue;
            p = 0; flad = v[i], fact = 1;
            while(x%flad==0){
                p++;
                fact += flad;
                flad = flad*v[i];
            }
            if(flad!=v[i])
                x = x/(flad/v[i]);
            nd *= (p+1);
            s = (s*fact)%MOD;
        }
        printf("%d %lld\n", nd, s);
    }
    return 0;
}
void ciur(){
    int i, j;
    v[++np] = 2;
    for(i=3; i<RMAX; i=i+2)
        if(!vc[i]){
            for(j=i*i; j<MAX; j=j+i+i)
                vc[j] = 1;
            v[++np] = i;
        }
    for(i=RMAX+1; i<MAX; i=i+2)
        if(!vc[i])
            v[++np] = i;
    v[np+1] = MAX+1;
}