Cod sursa(job #2278879)

Utilizator ianiIani Biro iani Data 8 noiembrie 2018 17:44:04
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MOD=9973,dim=1000000;
int nrprim[dim+5],k;

bool ciur[dim+5];

void exec_ciur()
{
    for (int i=2; i<=dim; i++)
        ciur[i]=true;
    for (int i=2; i<=dim; i++)
        if (ciur[i]==true)
        {
            nrprim[++k]=i;
            for (int j=i+i; j<=dim; j+=i)
                ciur[j]=false;
        }
}

void sumadiv(long long int x,int &nrdiv, int &sdiv)
{
    int p=0,e=1;
    nrdiv=1;
    sdiv=1;
    for (int i=1;nrprim[i]*nrprim[i]<=x;i++)
    {
        p=0;
        e=1;
        while (x%nrprim[i]==0)
        {
            x/=nrprim[i];
            e=e*nrprim[i];
            p++;
        }
        if(p!=0)
        {
            nrdiv*=(p+1);
            e=e*nrprim[i];
            sdiv=(1LL * sdiv*(e-1)/(nrprim[i]-1))%MOD;
        }
    }
    if (x!=1)
    {
        nrdiv*=2;
        sdiv=(1LL * sdiv*(x*x-1)/(x-1))%MOD;
    }
}

int main()
{
    ifstream fin ("ssnd.in");
    ofstream fout ("ssnd.out");
    exec_ciur();
    int n;
    fin>>n;
    for (int var=0;var<n;++var)
    {
        long long int x;
        int nrdiv,sdiv;
        fin>>x;
        sumadiv(x,nrdiv,sdiv);
        fout<<nrdiv<<' '<<sdiv<<'\n';
    }
    return 0;
}