Cod sursa(job #1236685)

Utilizator florinpocolPocol Florin florinpocol Data 2 octombrie 2014 14:19:38
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
//O prima idee de optimizare ar fi sa nu mai luam in calcul numerele pare pentru
// ca stim ca singurul numar prim par e 2. Deci sa vedem noua varianta a programului:
#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=1;
    for (i = 3; i <= n; i=i+2)
    {
      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;
}