Cod sursa(job #2011584)

Utilizator skoda888Alexandru Robert skoda888 Data 16 august 2017 17:04:26
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb

/////////INFO ARENA - Fractii//////////

#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

std::fstream in_fractii("fractii.in", std::ios::in);
std::fstream out_fractii("fractii.out", std::ios::out);

int main()
{
    unsigned int N;

    in_fractii >> N;

    in_fractii.close();

    //cazuri posibile
    unsigned int num_de_fractii = N * N - N + 1;

    /////// Acum, o sa scad toate din cazurile posibile pe cele nefavorabile ////////

    //Din start, fractiile  caer au 1 la numitor sau la numarator sunt fractii ireductibile, deci reprezinta cazuri favorabile
    //si nu o sa ma ocup cu acestea

    std::vector<bool> numere_prime;

    for(unsigned int num = 2; num <= N; num++)
    {
        //initial, presupun ca toate nr sunt prime, apoi voi incepe sa aplic erastotene
        numere_prime.push_back(true);
    }
    unsigned int prim = 2;
    while(prim <= N)
    {
        if(numere_prime[prim - 2] == true)
        {
            unsigned int multiplii = prim;
            unsigned int num_de_multiplii = 0;

            while(multiplii <= N)
            {
                multiplii += prim;
                //fiind multiplu, nu e nr prim
                numere_prime[multiplii - 2] = false;
                num_de_multiplii++;
            }
            num_de_fractii -= pow(num_de_multiplii, 2);
            num_de_fractii += num_de_multiplii;

        }

            prim++;

    }

    for(; prim <= N; prim++)
    {
        if(numere_prime[prim - 2] == true)
        {
            num_de_fractii -= 1;
        }
    }

    out_fractii << num_de_fractii;
    return 0;
}