Cod sursa(job #2919317)

Utilizator Alex18maiAlex Enache Alex18mai Data 16 august 2022 18:42:56
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
// ALEX ENACHE

//#include <iostream> //de decomentat daca se citeste si afiseaza de la tastatura
#include <fstream> //de comentat in acest caz

using namespace std;

//ifstream cin("input"); ofstream cout("output"); //de comentat in acest caz
ifstream cin("ciur.in"); ofstream cout("ciur.out"); 

bool ciur[2000005]; 
//array global de marime 2000005 care contine bool-uri (initializate cu 0 adica false)


int main()
{
	
	/*
	break; -> intr-un for / while o sa opreasca de tot acest loop 
	continue; -> intr-un for / while o sa opreasca pasul curent si o sa treaca la urmatorul pas
	return 0; -> in functia main o sa opreasca programul
	exit(0); -> oriunde ar fi, daca se ajunge aici programul o sa fie oprit
	*/


	/*
	// https://www.pbinfo.ro/probleme/3663/ppdp 
	// Varianta 1
	int n;
	cin >> n;

	int patrat;

	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			patrat = i * i;
			break;
		}
	}

	cout << patrat;
	*/

	/*
	// https://www.pbinfo.ro/probleme/3663/ppdp 
	// Varianta 2
	int n;
	cin >> n;

	int patrat;

	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			cout << i * i;
			return 0;
		}
	}
	*/

	/*
	//EXEMPLU continue; -> afiseaza doar numere impare
	int n;
	cin >> n;

	for (int i = 1; i <= n; i++) {
		if (i % 2 == 0) {
			continue;
		}
		cout << i << " ";
	}
	*/



	//CIUR
	int n;
	cin >> n;

	int cont = 0;

	for (int i = 2; i <= n; i++) { 
		if (ciur[i] == 0) { //i este prim
			cont++;
			for (int j = i + i; j <= n; j += i) { //facem toti multiplii lor sa aibe valoare ciur[j] egala cu 1
				ciur[j] = 1; //j nu este prim
			}
		}
	}

	cout << cont << '\n';

}