輸出1000以內的素數


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

 

輸出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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM