Cod sursa(job #744766)

Utilizator test0Victor test0 Data 9 mai 2012 17:02:30
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#define MAX 1000010
#define MOD 9973
bool p[MAX];
int pr[78510],nr;

void ciur(){
    int i=2;
    while(i<1000){
        while(i<MAX&&p[i])i++;
        for(int j=i*i;j<MAX;j+=i)p[j]=1;
        i++;
    }
    for(i=2;i<MAX;i++)
    if(p[i]==0)pr[++nr]=i;
}

long long pow(int x,int k){
    long long r=x;
    for(int i=1;i<k;i++)r*=x;
    return r;
}

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

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