C語言實現統計100以內所有素數的個數

2022-09-21 14:03:10 字數 1459 閱讀 9822

目錄

本人c語言萌新,最近工作中頻頻出現c語言小錯誤,遂決定使用笨方法提高我的c語言水平,堅持每天乙個c語言小練習,養成c語言手感,從此讓程式設計成為習慣。

統計100以內所有素數的個數

素數(prime number)又稱質數,在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數,2是最小的素數。

#include

#define integer_range 100 //數字範圍

int if_prime(int num);

int main()

printf("%d以內的素數個數為:%d\n", integer_range, sum);

return 0;}/*

* 判斷是否為素數,是則返回1,否返回0

* */

int if_prime(int num)

return 1;

}這裡只對if_prime(num)函式進行完善:

至於為什麼用sqrt,這裡借用下別人的解釋(比較通俗易懂)

當乙個數不是素數的時候,那這數肯定是除了它本身和1外的兩個數之積( a*b = m ),如果設a是小於或者等於b的數,那a肯gzkrnyj定是小於等於m的開根,即a <= sqrt( m )。——百度貼吧(c語言吧)

還有一種用法是把num改成num/2,但是當num大於4時,sqrt(num)比num/2小,所以用sqrt(num)的效率比用num/2高。

至於為什麼可以用num/2,這裡也借用別人的解釋(有點難懂)

其實這是數學知識,n不除以2也行,只是運算量更大,其實最少運算量的方法是n開根號。

我證明一下合理性吧。用反證法。

如果乙個數是合數,則一定能分解成兩個不是1的數相乘,所以能被分解成乙個大於等於2的數和乙個小於等於n/2相乘。

如果這個數沒有乙個小於等於n/2的因數,那它一定不是合數,所以它一定是素數,不用再檢查後面的數了。這裡是小於n/2,是因為如果這個數能被n/2整除,那2一定是它的因數,很容易知道2小於等於n/2,所以在檢查n/2之前一定檢查過2。證明完成!

n開根號也差不多這樣證明。——

如果你對上面的兩種用法都不理解,那記住它們就行了。。。

#include

/* gzkrnyj* 判斷是否為素數,是則返回1,否返回0(改進版)

* */

int if_prime(int num)

return 1;

}原文鏈結:

sqrt()為開方函式,需要加math.h標頭檔案

// created by www.runoob.com on 15/11/9.

// copyright 2023年 菜鳥教程. all rights reserved.//

#include

#include

int main()

}return 0;

}本文標題: c語言實現統計100以內所有素數的個數

本文位址:

C 實現統計100以內所有素數的個數

統計100以內所有素數的個數 素數 prime number 又稱質數,在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數,2是最小的素數。最大範圍內數字 int maxnum 100 所有素數和,初始0 int sum 0 2是最小的素數,for迴圈範圍為2 100 for int ...

python之求解100以內的所有素數

質數 prime number 又稱素數,有無限個。質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數。如 2 3 5 7 11 13 17 19。一 說明 判斷素數,函式或一般語句均可 100以內,設定迴圈上限 輸出格式要求 二 參考 2.1 方法一 math庫 impor...

Python實踐 7 輸出100以內的所有素數

1 輸出100以內的所有素數,素數之間以乙個空格區分 注意,最後乙個數字之後不能有空格 2 i 2 3 l 4while i 100 5 k 0 6for j in range 2 i 7if i j 0 8 k k 1 9if k 0 10 11 i i 1 12 print join str i...