Cod sursa(job #1006648)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 7 octombrie 2013 15:23:41
Problema Suma si numarul divizorilor Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#define Mod 9973

using namespace std;
int p[100000],t;
long long n,s,b,i,j,nr,nrr,nre,x[1003],Max;
bool ok;
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d\n", &t);
    Max=0;
     for(i=1; i<=t; ++i)
    {
        scanf("%lld\n", &x[i]);
        if(Max<x[i]) Max=x[i];
    }
    p[1]=2;
    nr=1;
    for(i=3; i*i<=Max; i+=2)
    {
        ok=true;
        for(j=1; j<=nr && p[j]*p[j]<=i; ++j )
            if(i%p[j]==0)
            {
                ok=false;
                break;
            }
        if(ok) p[++nr]=i;
    }

    for(i=1; i<=t; ++i)
    {
        n=x[i];
        nre=1;
        s=1;
        for(j=1; j<=nr && n>1; ++j)
        {
            b=p[j];
            nrr=1;
            while(n%p[j]==0)
            {
                n/=p[j];
                b*=p[j];
                ++nrr;
            }
            nre*=nrr;
            s=(s*(b-1)/(p[j]-1))%Mod;
        }
        if (n>1){
        nre*=2;
        s=((s*(n%Mod*n%Mod)%Mod-1)/(n-1))%Mod; }
        printf("%lld %lld\n", nre,s);
    }



    return 0;
}