Pagini recente » Cod sursa (job #1760222) | Cod sursa (job #2053833)
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
#include <iostream>
#include <fstream>
using namespace std;
template <typename T>
struct ExactDiv {
ExactDiv() {}
ExactDiv(T n) : t(T(-1) / n), i(mul_inv(n)) {}
T mul_inv(T n) {
T x = n;
for (int i = 0; i < 5; ++i) x *= 2 - n * x;
return x;
}
friend T operator / (T n, ExactDiv d) { return n * d.i; };
bool divide(T n) { return n * this->i <= this->t; }
T t, i;
};
constexpr int kSqrtMax = 1415;
ExactDiv<uint32_t> division[kSqrtMax];
bool IsPrime(int n) {
for (int i = 3; i * i <= n; i += 2) {
if (division[i].divide(n)) {
return false;
}
}
return true;
}
int main() {
#ifdef INFOARENA
ifstream cin("ciur.in");
ofstream cout("ciur.out");
#endif
for (int i = 3; i < kSqrtMax; i += 2) {
division[i] = ExactDiv<uint32_t>((uint32_t)i);
}
int n; cin >> n;
int answer = 1;
for (int i = 3; i <= n; i += 2) {
if (IsPrime(i)) {
answer += 1;
}
}
cout << answer << endl;
}