Przeglądając książkę C. Dellanoy'a natrafiłam na kod którego nie rozumiem. Jest to implementacja tzw. sita Eratostenesa, algorytmu który wyszukuje liczby pierwsze. Jeśli ktoś mógłby mi wyjaśnić to byłabym wdzięczna.
Nie rozumiem co robi ta pętla i dlaczego nie mogę jej zastąpić zwykłym ifem?
while(liczby[++pierwsza] && pierwsza<n){}
Kod:
#include <stdio.h>
#define MAX 10000
#define TRUE 1
#define FALSE 0
int main(void){
long int liczby[MAX+1];
int pierwsza, i, n;
printf("Podaj przedzial od 1 do 10000:\n");
scanf("%d", &n);
//zerowanie
for(i=1; i<n; i++)
liczby[i]=FALSE;
liczby[1]=TRUE;
//szukanie pierwszych
pierwsza=1;
while(pierwsza*pierwsza<=n){
while(liczby[++pierwsza] && pierwsza<n){}
for(i=2*pierwsza; i<=n; i+=pierwsza)
liczby[i]=TRUE;
}
//wypis
printf("Liczby pierwsze:\n");
for(i=1;i<n;i++)
if(!liczby[i])
{
printf("%d ", i);
}
return 0;
}