Cod sursa(job #1184523)

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