先給出素數的定義:
算法思考:
判斷一個數是不是素數,隻需要判斷它是不能隻能被1和自身整除。
那怎麼判斷一個數不能被除1和自身之外的其他數整除呢?想法是寫一個循環,循環裡依次除以從2到這個數減1的所有的整數,如果都不能整除,說明這個數是素數;如果出現一個能整除的數,那麼這個數不是素數。
(其實,判斷素數還可以優化,循環裡依次除以從2到這個數平方根的所有的整數就可以了。因為假設一個數n,除以2~根号n的整數,都不能整除,那麼除以根号n~n-1的整數也不能整數。在文章最後再貼上優化的代碼。)
那怎麼判斷能不能整除呢?我麼知道C語言有求餘數的運算符%,如果餘數是0,那麼說明能整除了。
我們來寫程序代碼。這裡,說明一下,當你寫一個具有某個功能的代碼的時候,把這個功能寫成一個函數,而不是所有的代碼都放在main函數裡。在main函數裡調用這個你寫的函數。
給函數命名,如果你知道或者查到了素數的英文單詞是prime number,那麼函數可以起名為 is_primer_number(如果你不知道素數的英文單詞,那麼随便起個名字也可以,比如叫fun)。因為要傳遞一個代判斷的整數,所以有一個int類型參數。返回值我們用bool型(代碼裡要包含頭文件stdbool.h),如果是素數返回true,如果不是素數返回false。
代碼:
判斷是不是素數的函數寫好了。題目是要求1到1000之間所有的函數。你可以再寫一個函數,函數的功能是求1到某個整數之間的所有素數并打印。函數命名為print_prime_num。有一個int類型參數。返回值我們寫為整型,返回素數的個數。
循環把2到這個數之間的每個整數,作為參數,傳給上面寫的函數is_prime_number(),如果是素數,就打印。
main函數的寫法。輸入一個整數,作為參數,傳給函數print_prime_number()處理:
運行結果:
優化
判斷素數的函數還可以優化,循環裡依次除以從2到這個數平方根的所有的整數就可以了。因為假設一個數n,除以2~根号n的整數,都不能整除,那麼除以根号n~n-1的整數也不能整數。所以我們隻要循環2~根号n之間的數就可以了。
函數is_prime_number()可以寫為下面這樣。這裡用到了求平方根的函數sqrt(),要包含頭文件math.h。另外,函數sqrt()的返回類型是double,但是這裡我們要的是整數,所以加上(int)強制轉換為整型。
運行結果:
歡迎掃碼關注“C語言修仙”,分享C語言知識點、編程工具、解題方法。
關注“C語言修仙”,分享C語言知識點、編程工具、解題方法
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!