Cod sursa(job #2497884)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 23 noiembrie 2019 11:53:33
Problema Suma si numarul divizorilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 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;
    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;
        p=1;
        ok=0;

        while(x!=1 && p<=aux)
        {
                if(x%prim[p]==0) ok=1;
                e=0;
                while(x%prim[p]==0)
                {
                    x=x/prim[p];
                    e++;

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


            p++;
        }

        if(ok==0) fout<<2<<' '<<(x+1)%9973<<"\n";
        else fout<<nrdiv<<' '<<suma%9973<<"\n";
    }



}