Pagini recente » Cod sursa (job #966111) | Cod sursa (job #1927778) | Cod sursa (job #2813657) | Cod sursa (job #2779413) | Cod sursa (job #299704)
Cod sursa(job #299704)
#include <cstdio>
#include <bitset>
#define maxN 2000100
#define next(i) (i % 6 == 1) ? (4) : (2)
using namespace std;
bitset <maxN> prim;
int N;
int main () {
int i, x, y, now, k;
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &N);
for (x = 1; x * x <= N; ++ x)
for (y = 1; y * y <= N; ++ y) {
i = 4 * x * x + y * y;
if (i <= N && (i % 12 == 1 || i % 12 == 5))
prim[i] = prim[i] ^ 1;
i = 3 * x * x + y * y;
if (i <= N && (i % 12 == 7))
prim[i] = prim[i] ^ 1;
i = 3 * x * x - y * y;
if (x > y && i <= N && i % 12 == 11)
prim[i] = prim[i] ^ 1;
}
for (i = 5; i * i <= N; i += next(i))
if (prim[i]) {
now = i * i;
for (k = now; k <= N; k += now)
prim[k] = 0;
}
int Sol = 1; prim[4] = 0; prim[2] = prim[3] = 1;
if (N >= 3) Sol ++;
for (i = 5; i <= N; i += next(i))
if (prim[i])
++ Sol;
printf("%d\n", Sol);
}