Cod sursa(job #784610)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 6 septembrie 2012 15:05:23
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <cstring>
#define Mod 9973

int pr[80000],np;
bool p[1000001];
void ciur(){
    int i=2;
    while(i<1001) {
        while(p[i]) i++;
        for(int j=i*i; j<1000001; j+=i) p[j] = 1;
        i++;
    }
    for(i=2; i<1000001; i++) if(!p[i])pr[++np] = i;
}

void desc(long long n){
    int nr = 1, d, i = 1;
    long long p, s = 1;
    while(pr[i]*pr[i] <= n) {
        if(n % pr[i] == 0) {
            d = 0;
            p = 1;
            while(n%pr[i] == 0) {
                d++;
                p *= pr[i];
                n /= pr[i];
            }
            nr *= d+1;
            s = (s * ((p*pr[i]-1)/(pr[i]-1))) % 9973;
        }
        i++;
    }
    if(n!=1) {
        nr *= 2;
        s = (s * ((n*n - 1)/(n-1))) % 9973;
    }
    printf("%d %lld\n",nr,s);
}

int main(){
    int t;
    long long n;
    ciur();
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
        scanf("%d",&t);
		for (t--; t>=0; t--) {
            scanf("%lld",&n);
            desc(n);
        }
    return 0;
}