Pagini recente » Cod sursa (job #3269339) | Cod sursa (job #1349599) | Cod sursa (job #2691808) | Cod sursa (job #2909005) | Cod sursa (job #1238307)
#include <stdio.h>
#include <math.h>
int n, c;
char v[2000002];
void sieve_of_atkin() {
int i, j, x, n_root = (int)sqrt(n) + 1;
for (i = 1; i <= n_root; i++) {
for (j = 1; j <= n_root; j++) {
x = 4 * i * i + j * j;
if (x <= n && (x % 12 == 1 || x % 12 == 5)) {
v[x] = !v[x];
}
x = 3 * i * i + j * j;
if (x <= n && x % 12 == 7) {
v[x] = !v[x];
}
x = 3 * i * i - j * j;
if (i > j && x <= n && x % 12 == 11) {
v[x] = !v[x];
}
}
}
for (i = 5; i <= n_root; i++) {
if (v[i]) {
for (j = i * i; j <= n; j += i * i) {
v[j] = 0;
}
}
}
c = 2;
for (i = 5; i <= n; i++) {
if (v[i]) {
c++;
//printf("%d\n", i);
}
}
}
int main() {
FILE *in, *out;
in = fopen("ciur.in", "r");
fscanf(in, "%d", &n);
sieve_of_atkin();
out = fopen("ciur.out", "w");
fprintf(out, "%d", c);
fclose(in);
fclose(out);
return 0;
}