Cod sursa(job #736589)

Utilizator test0Victor test0 Data 18 aprilie 2012 23:47:49
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#define MOD 9973
using namespace std;
long long n;
int pr[78499],k;

unsigned char p[250001],set=1;

void prime(){
    int i=2,j;
    while(i<=1000){
        while(p[i/8]&set<<(i&7))i++;
        for(j=i*i;j<=1000000;j+=i)p[j/8]|=set<<(j&7); i++;};
     for(i=2;i<=1000000;i++)if(!(p[i/8]&set<<(i&7)))pr[++k]=i;
}

void process(){
    long long nr,d,S,x;
    int i=1;
    nr=1; S=1LL;
    while(i<=78498&&pr[i]<=n){
        if(n%pr[i]==0){
    x=pr[i];
    d=0;
        while(n%pr[i]==0){
            x*=pr[i];
            d++;
            n/=pr[i]; }
    nr=nr*(d+1)%MOD;
    S=S*((x-1)/(pr[i]-1))%MOD;
    }
    i++; }
    if(n!=1){
        nr=nr*2%MOD;
        S=S*((n*n-1)/(n-1))%MOD;
    }
    printf("%lld %lld\n",nr,S);
}

int main(){
    int t;
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
prime();
    scanf("%d",&t);
    while(t-->0){
        scanf("%lld",&n);
        process();
    }
}