Pagini recente » Cod sursa (job #649391) | Cod sursa (job #803109) | Cod sursa (job #2490728) | Cod sursa (job #2206061) | Cod sursa (job #299710)
Cod sursa(job #299710)
#include <cstdio>
#include <bitset>
#define maxN 2000100
#define next(i) (i % 6 == 1) ? (4) : (2)
using namespace std;
bitset <maxN> prim;
int N, patrat[1416];
int main () {
int i, x, y, now, k;
freopen("ciur.in", "r", stdin);
freopen("ciur.out", "w", stdout);
scanf("%d", &N);
for (i = 1; i <= 1415; ++ i)
patrat[i] = patrat[i - 1] + i + i - 1;
for (x = 1; patrat[x] <= N; ++ x)
for (y = 1; patrat[y] <= N; ++ y) {
i = (patrat[x] << 2) + patrat[y];
if (i <= N && (i % 12 == 1 || i % 12 == 5))
prim[i] = prim[i] ^ 1;
i = (patrat[x] << 1) + patrat[x] + patrat[y];
if (i <= N && (i % 12 == 7))
prim[i] = prim[i] ^ 1;
i = (patrat[x] << 1) + patrat[x] - patrat[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 = patrat[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);
}