Pagini recente » Cod sursa (job #774366) | Cod sursa (job #1396063) | Monitorul de evaluare | Cod sursa (job #1663074) | Cod sursa (job #761925)
Cod sursa(job #761925)
/*
Algoritmul de aflare a numerelor prime mai mici decat un numar dat folosind ciurul lui Eratostene.
*/
#include <stdio.h>
#define MAXNUM 2000000
int prim[MAXNUM / 2];
int ciur_eratostene (int numar) {
int prime = 0;
int i, j;
for (i = 1; ((i * i) << 1) + (i << 1) <= numar; i++)
prim[i] = 0;
for (i = 1; ((i * i) << 1) + (i << 1) <= numar; i++) {
if (!prim[i]) {
prime++;
j = ((i * i) + 1) + (i << 1);
while ((j << 1) + 1 <= numar) {
prim[j] = 1;
j += (i << 1) + 1;
}
}
}
return prime;
}
int main () {
int numar;
FILE *f_in = fopen("ciur.in", "r");
FILE *f_out = fopen("ciur.out", "w");
fscanf(f_in, "%d", &numar);
int prime = ciur_eratostene(numar);
int i;
for (i = 1; 2 * i + 1 <= numar; i++)
if (!prim[i])
prime++;
fprintf(f_out, "%d\n", prime);
return 0;
}