Cod sursa(job #1702990)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 15 mai 2016 22:05:18
Problema Ciurul lui Eratosthenes Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>
using namespace std;

int urm[100010], prec[100010];
bool prim[10001]; /// 1 -> meprim

int main()
{
	ifstream in("ciur.in");
	int p, q;
	int n;
	in >> n;

	for (int i = 1; i <= n + 1; i++) {
		urm[i] = i + 1;
		prec[i] = i - 1;
	}

	for (p = 2; p * p <= n; p = urm[p]) {
		q = p;
		while (q <= n) {
			int x = p * q;
			while (x <= n) {
				prim[x] = 1;
				urm[prec[x]] = urm[x];
				prec[urm[x]] = prec[x];
				x *= p;
			}
			q = urm[q];
		}
	}
	int r = 0;
	for (int i = 2; i <= n; i++) {
		if (!prim[i])
			r++;
	}
	ofstream out("ciur.out");
	out << r;
	in.close();
	out.close();
	return 0;
}