在這個程序中,他的實現邏輯是,先把這個數組a填上值,也就是這壹句
for(i = 2; i <= n; i ++)
a[i] = i;
之後,從初始值2,第壹輪循環是,將2以及2的倍數都將其改為0,這樣就間接的實現將2以及2的倍數都刪掉的效果了,問題來了,怎麽去實現2以及2的倍數都等於0,這就用到了這個循環
for(j = a[i] * 2; j <= n; j += a[i])
a[j] = 0;
首先讓初始值為2,也就是這壹句j = a[i] * 2,而2的倍數則是每次加壹個2就行,在這裏 i 和a[i] 都等於2(前面給數組賦值語句的時候給的值),所以這裏是 讓j 每次都加上 i 或者 a[i] 就行。
執行完這壹句之後,讓i ++, 這時候 i 就等於3 ,同上所訴,就會繼續3以及3的倍數的操作了。
如果只是這麽做得話,會有壹個問題,就是妳前面對2的倍數進行清0操作的時候,那些相應的位置就會變成0,比如說 a[4], 這時候就變成了0,然後在妳的循環執行到4以及4的倍數的時候,妳就會發現妳的for循環變成了壹個死循環,因為j 會壹直在自加 0,永遠不會大於n,必然是死循環,所以就有了下面while(a[i] == 0) i++;這壹句,也就是如果a[4]等於0.就不執行4以及4的倍數的操作,直接跳到5的倍數的操作。
最後壹個空就是打印了,妳只是想打印素數,但是裏面還有壹些0,所以遇到0就不打印,不是0就打印。
大概就是這些了。不明白繼續追問!