Cod sursa(job #1247916)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 24 octombrie 2014 12:07:28
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
#define Nmax 1000000
#define RAD 1000
#define Pmax 80000
#define MOD 9973

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


int main()
{
    int i, j, a, t, sumDiv, nrDiv, 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;
        
        if(i < RAD)
            for(j = i * i; j < Nmax; j += (i << 1))
                isPrime[j] = 1;
    }
    
    fin >> t;
    for(; t; --t)
    {
        fin >> a;
        sumDiv = nrDiv = 1;
        
        for(i = 0; i < nrP; ++i)
        {
            sum = 1;
            for(nr = 0, p = 1; a % prim[i] == 0; a /= prim[i])
            {
                ++nr;
                p *= prim[i];
                sum += p;
            }
            
            sumDiv *= sum; sumDiv %= MOD;
            nrDiv *= nr + 1;
        }
        
        if(a != 1)
        {
            //a este nr prim
            nrDiv *= 2;
            sumDiv *= a + 1; sumDiv %= MOD;
        }
        
        fout << nrDiv << ' ' << sumDiv << '\n';
    }
    return 0;
}