以上程式輸出所有不大於999的質數,產生格式化輸出。程式採用篩選的思想對指定範圍內的所有正整數進行排除,最後得以"倖存"的全部都為質數。該演算法思想詳見維基百科sieve of eratosthenes相關條目。需要注意的是以上c++實現中的外層迴圈只用進行到sqrt(upper),證明如下:
假設存在乙個非質數n,滿足sqrt(upper) < n <= upper且它沒有被程式排除,
則n可以寫成n = k * t 的形式,這裡k與t都是正整數,且k與t中至少有乙個數小於sqrt(upper),否則會產生n > upper的矛盾。
不失一般性,假設這個數為t,那麼在之前的迴圈中t已經被程式檢查過,這裡可以分為兩種情況:
1. t不是任意乙個小於t的正整數的整倍數
那麼在內層迴圈中我們對所有的t * 2, t * 3, t * 4, ……, t * k, ……做過檢查,必然使得數 t * k 被排除,矛盾。
2. 存在乙個小於t的最小正整數d,且t是d的整倍數
那麼在程式之前的外層迴圈中t被檢查過,d作為t的倍數被排除。對於數 k * t, 它必然也是d的整倍數,同樣會被排除,矛盾。
所以程式在外層迴圈時只需要對所有不大於sqrt(upper)的數進行檢查即可,節省了相當一部分時間。
Python 輸出指定範圍內的素數
兩種方法比較其運算時間 在這裡 python 輸出指定範圍內的素數 素數 prime number 又稱質數,有無限個。除了1和它本身以外不再被其他的除數整除。以下例項可以輸出指定範圍內的素數 使用者輸入指定的數字範圍 a int input 輸入區間最小值 b int input 輸入區間最大值 ...
使用函式輸出指定範圍內的Fibonacci數
本題要求實現乙個計算fibonacci數的簡單函式,並利用其實現另乙個函式,輸出兩正整數m和n 0函式介面定義 int fib int n void printfn int m,int n 其中函式fib須返回第n項fibonacci數 函式printfn要在一行中輸出給定範圍 m,n 內的所有fi...
使用函式輸出指定範圍內的完數
本題要求實現乙個計算整數因子和的簡單函式,並利用其實現另乙個函式,輸出兩正整數mm和nn 0函式介面定義 int factorsum int number void printpn int m,int n 其中函式factorsum須返回int number的因子和 函式printpn要逐行輸出給定...