Wyjaśnienie kodu

0

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;
}
 
0

Nie możesz jej zastąpić if'em gdyż to jest pętla i ona wykona się więcej niż raz. Przeanalizuj dokładnie z debuggerem co się tam dzieje a dowiesz się jak to działa.

0

Ale po co ona jest, skoro ma po sobie klamry, czyli teoretycznie nic nie robi?

1

Robi - przeanalizuj to ++ w warunku pętli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1