Cod sursa(job #736590)

Utilizator test0Victor test0 Data 18 aprilie 2012 23:53:46
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#define DIM 1000001
#define MOD 9973
using namespace std;
long long n;
int pr[78499],k;
bool viz[DIM];

void ciur(){
    int i=2;
    while(i<1000){
        while(viz[i])i++;
        for(int j=i*i;j<DIM;j+=i)viz[j]=1;
        i++; }
    for(int i=2;i<DIM;i++)if(!viz[i])pr[++k]=i;
}
void process(){
    long long nr,d,S,x;
    int i=1;
    nr=1; S=1LL;
    while(i<=78498&&pr[i]*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);
ciur();
    scanf("%d",&t);
    while(t-->0){
        scanf("%lld",&n);
        process();
    }
}