Cod sursa(job #1193516)

Utilizator ZenusTudor Costin Razvan Zenus Data 31 mai 2014 22:13:10
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#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];
ifstream f("ssnd.in");
ofstream g("ssnd.out");

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()
{
f>>N;

Ciur();
while (N--)
{
    f>>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%MOD)*(((int)pow(1.0*prime[i],1.0*(E+1))-1))/(prime[i]-1))%MOD;
            P=P*(E+1);
        }

        ++i;
    }

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

    g<<P<<" "<<S<<"\n";
}
f.close();
g.close();
return 0;
}