1. 程式人生 > >輸出1000以內的素數

輸出1000以內的素數

bre n) 研究 結果 直接 highlight 一個數 區分 printf

記得以前也寫過,當時不會寫是看了別人的答案才寫出來的,今天再寫發現還是不會寫,看來上次是根本就沒有學會呀,不過苦思冥想還是想出來一種不那麽好的方法,好在自己理順了思路,是自己研究出來的成果。

輸出1000以內的素數,那麽只需要每次取出一個數,然後把這個數依次除以從2到它本身,看余數,如果余數有0的情況,那麽一定不是素數,如果全部除完了發現都沒有余數為0的情況,那麽一定是素數。

比如判斷7是不是素數,必須看7%[2,6]的結果。

容易發現,不是素數這個條件比較容易滿足,因為只要有一個余數為0的情況就能判定,那麽在程序裏面就這麽判斷。

還有個問題,如果一7%[2,6]的過程中有一個余數位0的情況,那麽就不用往下判斷了,因為沒有必要了,可以直接break

還有一個問題,在註釋裏面說清楚了。

int main(void)
{
    /*
	輸出1000以內的質數
	*/

	int m;
	int n;
	for (n=2;n<=1000;n++) 
	{
		for (m = 2; m < n; m++)
		{
			if (n % m == 0)
			{
				break;
			}
		}

		/*
		一個數是素數或者不是素數流程都會到達這裏
		該怎麽區分這兩種情況呢?
		如果是素數,那麽一定是進入循環了,那麽一定滿足
		m<n而且沒來得及執行m++,因為是素數就break了。
		
		所以m<n一定能推出n不是素數。

		如果是一個數是素數,那麽意味著裏層for循環走完了,走完的原因是因為不滿足m<n這個條件了
		那麽此時的m一定是等於n的。
		
		所以m==n一定能推出n是素數
		*/

		 if(m==n)
		{
			printf("%d ",n);
		}
	}

	return 1;
}

  

輸出1000以內的素數