Cod sursa(job #1236254)

Utilizator florinpocolPocol Florin florinpocol Data 1 octombrie 2014 19:02:37
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
//Cerinta: Dandu-se un numar natural N, sa se determine numarul numerelor
//        prime mai mici sau egale cu N.
//  Spunem ca un numar natural x este prim daca si numai daca x > 1
// si singurii sai divizori sunt 1 si x.

#include <fstream>
using namespace std;

//class PrimeNumbersSieve1

  bool p[1000001];   int n;
  //p[i] == 0 if i is prime
  int ciur(int n)
  {
    int i, j, nr;

    nr=0;
    for (i = 2; i <= n; ++i)
    {
      if (p[i] == 0)
      {
        nr++;
        for (j = i * i; j <= n; j = j+ i)
             // e optimizat pt ca nu e de la i+i daca se iau exeple se va vedea ca pt 5
             //10 a fost marcat de 2 , iar 15 de 3, iar 20 de 2

        {
          p[j] = 1;
        }
      }
    }
    return nr;
  }


int main()
{
    ifstream f("ciur.in");
    ofstream g("ciur.out");
    f>>n;
    g<<ciur(n);

    g.close();
    f.close();
    return 0;
}