Cod sursa(job #3196778)

Utilizator thinkphpAdrian Statescu thinkphp Data 24 ianuarie 2024 19:39:29
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#define FIN "ciur.in"
#define FOUT "ciur.out"

//n = 10
//2,3,5,7 => 4 numere prime

using namespace std;

typedef unsigned long ulong;
typedef unsigned int u_int;

int Eratosthenes(ulong n) {

    ulong i, j,

          size = n - 1;

          //n = 10 - 1

    bool arr[ n + 1 ];

    for(i = 2; i < n + 1; i++) arr[ i ] = true;

    //arr: 1 1 1 1 0 1 0 1 0 0 0
    //ind: 0 1 2 3 4 5 6 7 8 9 10
    i = 2;

   //n = 10

    while( i * i <= n ) {

         if( arr[ i ]  == true ) {

           j = 2;

           while( i * j <= n ) {

                int multiply = i * j;

                if(arr[ multiply ] == 1) size--;

                arr[ multiply ] = false;

                j++;
           }
         }

         i++;
    }

    return size;
}

int main(int argc, char const *argv[]) {

  ifstream fin( FIN );
  ofstream fout( FOUT );

  ulong n;

  fin>>n;

  fout<<Eratosthenes( n );

  return 0;
}