Cod sursa(job #1193515)

Utilizator ZenusTudor Costin Razvan Zenus Data 31 mai 2014 22:10:47
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <cmath>

using namespace std;

#define LL long long
#define MOD 9973
#define NMAX1 1000005
#define NMAX2 100005

LL N,X,E,S,P,i;
LL sel[NMAX1];
LL prime[NMAX2];

void Ciur()
{
    for (LL i=2;i<NMAX1;i++)
    {
        if (sel[i]) continue;
        prime[++prime[0]]=i;

        for (LL j=2*i;j<NMAX1;j+=i) sel[j]=true;
    }
}

int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);

scanf("%lld",&N);

Ciur();
while (N--)
{
    scanf("%lld",&X);

    P=S=i=1;

    while (X && X>=prime[i]*prime[i])
    {
        E=0;
        while (!(X%prime[i]))
        {
            X/=prime[i];
            ++E;
        }

        if (E)
        {
            S=(S*(((int)pow(1.0*prime[i],1.0*(E+1))-1))/(prime[i]-1));
            if (S>=MOD) S-=MOD;
            P=P*(E+1);
        }

        ++i;
    }

    if (X>=2)
    {
        P*=2;
        S=( S * ( (X*X-1) / (X-1) ) );
        if (S>=MOD) S-=MOD;
    }

    printf("%lld %lld\n",P,S);
}
    return 0;
}