目錄
本人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...