Cod sursa(job #2665437)

Utilizator Marius05Voina Marius Marius05 Data 30 octombrie 2020 19:34:23
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("ciur.in");
ofstream fout("ciur.out");

vector<int> v;
bool c[1505];
int n, nr, i;

void ciur()
{
	int i, j;
	for (i = 3; i * i * i * i <= n; i += 2)
		if (!c[i])
			for (j = i * i; j * j <= n; j += 2 * i)
				c[j] = 1;
}

bool prim(int x)
{
	int i;
	for (i = 0; i < v.size() && v[i] * v[i] <= x; ++i)
		if (!(x % v[i]))
			return false;
	return true;
}

int main()
{
	fin >> n;
	ciur();
	v.push_back(2);
	for (i = 3; i * i <= n; i += 2)
		if (!c[i])
			v.push_back(i);
	for (i = (v.back() == 2 ? 3 : v.back() + 2); i <= n; ++i)
		if (prim(i))
			++nr;
	fout << v.size() + nr;
	fin.close();
	fout.close();
	return 0;
}