Pagini recente » Cod sursa (job #1195173) | Cod sursa (job #1932773) | Cod sursa (job #2438731) | Cod sursa (job #2442320) | Cod sursa (job #2660109)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned long ulong;
ulong sieve(ulong n) {
char* prime = malloc((n + 1) * sizeof(char));
if (!prime) {
fprintf(stderr, "Error, failed to allocate memory\n");
exit(EXIT_FAILURE);
}
memset(prime, 1, sizeof(prime));
for (ulong i = 2; i * i <= n; i++)
if (prime[i] == 1)
// Update all multiples of p greater than or
// equal to the square of it
// numbers which are multiple of p and are
// less than p^2 are already been marked.
for (ulong j = i * i; j <= n; j += i)
prime[i] = 0;
ulong count = 0;
for (ulong i = 2; i <= n; i++)
if (prime[i])
count++;
return count;
}
int main() {
FILE* in = fopen("ciur.in", "r");
if (!in) {
return 0;
}
FILE* out = fopen("ciur.out", "w");
if (!out) {
fclose(in);
return 0;
}
ulong n;
int r = fscanf(in, "%lu", &n);
if (r != 1) {
fclose(in);
fclose(out);
return 0;
}
fprintf(out, "%lu", sieve(n));
fclose(in);
fclose(out);
return 0;
}