Cod sursa(job #2497914)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 23 noiembrie 2019 12:15:22
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>

using namespace std;

bool pr[1000001];

int putere (int x, int e)
{
    if(e==0) return 1;
    else
    {
        if(e%2==0) return putere(x*x, e/2);
        else return x * putere(x*x, e/2);
    }
}

int prim[80000];
int main()
{
    ifstream fin ("ssnd.in");
    ofstream fout ("ssnd.out");


    short n;
    int i, z, p, e, aux;
    long long x, nrdiv, suma, cp;
    bool ok;

    aux=0;
    for(i=2; i*i<=1000000; i++)
    {
        if(pr[i]==0)
        {
            for(z=i*i; z<=1000000; z=z+i) pr[z]=1;
        }
    }

    for(i=2; i<=1000000; i++)
    {
        if(pr[i]==0)
        {
            aux++;
            prim[aux]=i;
        }
    }

    fin>>n;

    for(i=1; i<=n; i++)
    {
        fin>>x;

        nrdiv=1;
        suma=1;

        cp=x;
        for(z=1; prim[z]*prim[z] <= cp && x!=1; z++)
        {
            //cout<<"z= "<<z<<"\nprim["<<z<<"]= "<<prim[z]<<"\n";

            e=0;

            while(x%prim[z]==0)
            {
                x=x/prim[z];
                e++;
            }

            nrdiv=nrdiv*(e+1);
            suma=suma * (putere(prim[z], e+1)-1) / (prim[z]-1);
        }

        if(x!=1)
        {
            nrdiv=2;
            suma=x+1;
        }
        //cout<<"\n";

        fout<<nrdiv<<' '<<suma%9973<<"\n";
    }



}