Cod sursa(job #1254873)

Utilizator MirunaMMiruna Mitu MirunaM Data 3 noiembrie 2014 17:26:55
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
//calculul numarului de dovizori; calculul sumei divizorilor - algoritm EFICIENT
#include<cstdio>
char ciur[1000001];
void ciuruire(){
    int prim=2,i;
    while(prim*prim<=1000000){
        for(i=2;i<=1000000/prim;i++)
            ciur[i*prim]=1;
        prim++;
        while(ciur[prim]==1)
            prim++;
    }
}
int main(){
    long long nr,i,p,produs,nrdiv,putere,k,n;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    ciuruire();
    scanf("%lld",&n);
    for(k=1;k<=n;k++){
        scanf("%lld",&nr);
        nrdiv=1;
        produs=1;
        for(i=2;i*i<=nr;i++)
            if(ciur[i]==0){
                p=0;
                putere=1;
                while(nr%i==0){
                    nr=nr/i;
                    p++;
                    putere*=i;
                }
                if(p!=0){
                    nrdiv*=p+1;
                    putere*=i;
                    produs=(produs*((putere-1)/(i-1))% 9973)%9973;
                }
            }
        if(nr!=1){
            nrdiv*=2;
            produs=(produs*((nr*nr-1)/(nr-1))%9973)%9973;
        }
        printf("%lld %lld\n",nrdiv,produs);
        }
            }