Pagini recente » Borderou de evaluare (job #1134206) | Cod sursa (job #3347819) | Cod sursa (job #1618207) | Cod sursa (job #922459) | Cod sursa (job #2215155)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ciur.in");
ofstream cout("ciur.out");
int nprime, n;
vector < int > prime;
int undiv[2000009];
void ciur2() {
for (int i = 2; i <= n; ++i) {
if (undiv[i] == 0) {
prime.push_back(i);
undiv[i] = i;
}
for (int p = 0; prime[p] <= undiv[i] && i * prime[p] <= n && p < prime.size(); ++p) {
if (undiv[i * prime[p]] != 0) {
undiv[i * prime[p]] = min(undiv[i * prime[p]], prime[p]);
}
else {
undiv[i * prime[p]] = prime[p];
}
}
}
}
void ciur1() {
for (int i = 4; i <= n; i += 2) {
undiv[i] = 2;
}
for (int i = 3; i * i <= n; i += 2) {
if (undiv[i] == 0) {
for (int j = i * i; j <= n; j += 2 * i) {
undiv[j] = i;
}
}
}
for (int i = 2; i <= n; ++i) {
nprime += (undiv[i] == 0);
}
}
int main()
{
cin >> n;
ciur1();
cout << nprime;
return 0;
}