Cod sursa(job #2039141)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 14 octombrie 2017 11:51:45
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

const int NMax = 1000005;
char ciur[NMax];
int prime[NMax], nr_pr;
int N;

void Ciur()
{
    for(int i=2; i<=sqrt(NMax); ++i)
        ciur[i] = 1;

    for(int i=2; i<=sqrt(NMax); ++i)
        if(ciur[i])
        {
            for(int j=i+i; j<=sqrt(NMax); j+=i)
                ciur[j] = 0;
        }

    prime[++nr_pr] = 2;
    for(int i=3; i<=sqrt(NMax); i+=2)
        if(ciur[i] == 1)
            prime[++nr_pr] = i;
}

pair < long long, long long > euclid_extins(long long x, long long y)
{
    if(y==0)
    {
        return {1,0};
    }

    auto  p = euclid_extins(y, x%y);
    long long d = x/y;
    return {p.second, p.first-d*p.second};
}

int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    Ciur();

    int t;
    fin >> t;
    for(int i=1; i<=t; ++i)
    {
        int x;
        fin >> x;
        long long sum = 0;
        long long nr_divi = 1;
        int poz = 1;

        while(prime[poz] * prime[poz] <=x )
        {

            long long nr = 0;

            while(x%prime[poz] == 0)
            {
                ++nr;
                x/=prime[poz];
            }

            if(nr>0)
            {
                nr_divi = 1LL * nr_divi * (nr+1);
            }

            ++poz;
        }

        if(x != 1)
            {   int nr = 1;
                nr_divi = 1LL * nr_divi * (nr+1); }

        fout << nr_divi << "\n";
    }


    return 0;
}