Cod sursa(job #1319624)

Utilizator OMEGAMAX10Bogdan Marghescu OMEGAMAX10 Data 17 ianuarie 2015 11:27:12
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include<fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
long long m,t,i,a,c,s,j,e,y,x,z,p;
char v[1000009];
long long prime[200001],np;
int main()
{
    for(i=1;i<=1000000;i=i+1)
    {
        v[i]=0;
    }
    np=0;
    for(i=2;i<=1000000;i=i+1)
    {
        if(v[i]==0)
        {
            prime[np+1]=i;
            np=np+1;
            v[i]=2;
            for(j=i*i;j<=1000000;j=j+i)
            {
                v[j]=1;
            }
        }
    }
    fin>>t;
    m=9973;
    for(i=1;i<=t;i=i+1)
    {
        fin>>a;
        c=1;
        s=1;
        x=a;
        j=1;
        while(prime[j]*prime[j]<=x)
        {
            if(x%prime[j]==0)
            {
                e=0;
                while(x%prime[j]==0)
                {
                    e=e+1;
                    x=x/prime[j];
                }
                c=c*(e+1);
                p=1;
                y=prime[j];
                z=e+1;
                while(z!=0)
                {
                    if(z%2==1)
                    {
                        p=(p*y);
                    }
                        y=(y*y);
                        z=z/2;
                }
                s=(s*(p-1)/(prime[j]-1));
            }
            j=j+1;
        }
        if(x>1)
        {
            c=c*2;
            s=s*(x+1);
        }
        fout<<c<<" "<<s%m<<"\n";
    }
    fin.close();
    fout.close();
    return 0;
}