Cod sursa(job #2132898)

Utilizator catalinpuricoicatalinpuricoi catalinpuricoi Data 16 februarie 2018 11:01:19
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#define Nmax 1000000
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long n,i,j,nr;
bool ciur[1000100];
int v[1000000];
void prim(long long &nr)
{
    v[++nr]=2;
    for(int i=3; i<=Nmax; i=i+2)
    if(ciur[i]==0)
    {
        v[++nr]=i;
        for(int j=i+i+i ; j<=Nmax; j = j + (i << 1))
        ciur[j]=1;
    }
}
void rezolvare()
{
    int x2,c,suma,ok,nr_actual,nr_div,x,calc;
    for(int i=1; i<=n; i++)
    {
        f>>x;
        x2=x;
        ok=1;
        suma=1;
        nr_div=1;
        while(x2!=1)
        {
            c=v[ok];
            calc=1;
            nr_actual=0;
            while(x2%c==0)
            {
                x2=x2/c;
                nr_actual++;
                calc= calc * c;
            }
            if(calc!=1)
            {
            calc=calc*c;
            nr_div=nr_div*(nr_actual+1);
            suma=suma * ( (calc-1) / (c - 1) );
            }
            ok++;
        }
        g<<nr_div<<' '<<suma<<'\n';
    }
}
int main()
{
    f>>n;
    prim(nr);
    rezolvare();
    return 0;
}