Cod sursa(job #2039144)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 14 octombrie 2017 11:55:15
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#define NMAX 100005

using namespace std;

int ciur[NMAX];

void ciurEr()
{
    for(int i=2; i<=NMAX; ++i)
    {
        if(ciur[i] == 0)
            for(int j= 2*i; j<=NMAX; j+=i)
                ciur[j] = 1;
    }
}

int nrDivizori(int n)
{
    int nrDiv = 1;
    int ciurSize = sqrt(n);
    if(ciur[n] == 0)
        nrDiv = 2;
    else
    {

        for(int i=2; i<=ciurSize; ++i)
        {
            int nrDivizoriAux = 0;
            if(ciur[i] == 0 && n%i == 0)
                while(n%i == 0)
                {
                    nrDivizoriAux++;
                    n/=i;
                }
            nrDiv *= nrDivizoriAux+1;
        }
    }
    return nrDiv;
}

void solve(int n)
{
    printf("%d ", nrDivizori(n));


}

int main()
{
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
    int T, n;
    scanf("%d", &T);
    ciurEr();
    for(int i=1; i<=T; ++i)
    {
        scanf("%d", &n);
        solve(n);
    }
    return 0;
}