Cod sursa(job #1247888)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 24 octombrie 2014 11:49:37
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
#define Nmax 1000000
#define Pmax 100000

vector< bool > isPrime(Nmax);
int prim[Pmax], nrP;


int main()
{
    int i, j, a, t, s, NR, p, nr, sum;
    
    prim[0] = 2; nrP = 1;
    for(i = 3; i < Nmax; i += 2)
    {
        while(isPrime[i] == 1 && i < Nmax) i += 2;
        if(i < Nmax) prim[nrP++] = i;
        
        for(j = i * i; j < Nmax && j >= 0; j += (i << 1)) isPrime[j] = 1;
    }
    
    fin >> t;
    for(; t; --t)
    {
        fin >> a;
        s = NR = 1;
        
        for(i = 0; i < nrP; ++i)
        {
            sum = 0;
            for(nr = 0, p = 1; a % prim[i] == 0; a /= prim[i])
            {
                ++nr;
                sum += p;
                p *= prim[i];
            }
            sum += p;
            
            s *= sum;
            NR *= nr + 1;
        }
        
        if(a != 1)
        {
            //a este nr prim
            NR *= 2;
            s *= a + 1;
        }
        
        fout << NR << ' ' << s << '\n';
    }
    return 0;
}