Cod sursa(job #781622)

Utilizator my666013Test Here my666013 Data 24 august 2012 19:00:25
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <cstring>
#define Max 1000001
#define Mod 9973

int pr[80000],np;

void ciur(){
    bool p[Max];
    int i = 2;

    memset(p,0,sizeof(p));
    while( i <= 1000 )
    {
        while(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] )pr[++np] = i;
}

void desc(long long x){
    int nr = 1, d , i = 1;
    long long p, s = 1;
    while( pr[i] * pr[i] <= x )
    {
        if(x % pr[i] == 0)
        {
            d = 0;
            p = 1;
            while(x % pr[i] == 0)
            {
                d++;
                p *= pr[i];
                x /= pr[i];
            }
            nr *= d+1;
            s = (s * ((p*pr[i]-1)/(pr[i]-1))) % Mod;
        }
        i++;
    }
    if(x != 1)
    {
        nr *= 2;
        s = (s * ((x*x - 1)/(x-1))) % Mod;
    }
    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);
        while(t--)
        {
            scanf("%lld",&n);
            desc(n);
        }

    return 0;
}