題目閱覽
幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的「篩法」生成。
首先從1開始寫出自然數1,2,3,4,5,6,…
1 就是第乙個幸運數。
我們從2這個數開始。把所有序號能被2整除的項刪除,變為:
1 _ 3 _ 5 _ 7 _ 9 …
把它們縮緊,重新記序,為:
1 3 5 7 9 … 。這時,3為第2個幸運數,然後把所有能被3整除的序號位置的數刪去。注意,是序號位置,不是那個數本身能否被3整除!! 刪除的應該是5,11, 17, …
此時7為第3個幸運數,然後再刪去序號位置能被7整除的(19,39,…)
最後剩下的序列類似:
1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, …
輸入格式
輸入兩個正整數m n, 用空格分開 (m < n < 1000*1000)
輸出格式
程式輸出 位於m和n之間的幸運數的個數(不包含m和n)。
樣例輸入1
1 20
樣例輸出1
5樣例輸入2
30 69
樣例輸出2
8思路簡介
首先,宣告乙個結構體陣列儲存小於n的所有數和其對應的位置次序;其次,依次遍歷這些數,計算此數所在位置是否整除前乙個幸運數值,若整除說明不滿足幸運數條件,將其次序置為-1,以便後續排除,否則就是滿足幸運數條件,更新此幸運數字置;再次,依次迭代更新除數(即前乙個幸運數數值),再進行遍歷,直到執行到最後數字時結束迴圈;最後,根據陣列中儲存的數值次序和題目給出的範圍條件計算所有幸運數個數輸出數值。在此,要注意的是:求幸運數計算操作時是使用序號位置而不是那個數本身數值能否被整除!!
實現**
#include #include using namespace std;
//使用結構體定義數字,包含其所在位置次序和數值大小
struct num;
int main()
//index記錄除數的位置,tempcount記錄更新後數字位置,value記錄除數數值
int index = 1, tempcount = 1, value = numbers[index].value;
//設定如果迭代到最後數字結束迴圈
while (index <= tempcount)else}}
} //更新除數字置及數值
index++;
value = tempvalue;
} //將滿足條件的幸運數個數輸出
int numcount = 0;
for (int t = 0; t < n ; t++){
if (numbers[t].order != -1&&numbers[t].value>m&&numbers[t].value結果截圖
藍橋杯 歷屆試題 幸運數(C )
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的 篩法 生成。首先從1開始寫出自然數1,2,3,4,5,6,1 就是第乙個幸運數。我們從2這個數開始。把所有序號能被2整除的項刪除,變為 1 3 5 7 9 把它們縮緊,重新記序...
藍橋杯 歷屆試題 幸運數
時間限制 1sec 記憶體限制 128mb 提交 39 解決 20 題目描述 幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的 篩法 生成 首先從1開始寫出自然數1,2,3,4,5,6,1 就是第乙個幸運數。我們從2這個數開始。把所有序號能被2整除的項刪除,變為 1 3 5 7 9 把它們縮緊...
藍橋杯 試題 歷屆試題 幸運數
題目鏈結 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 幸運數是波蘭數學家烏拉姆命名的。它採用與生成素數類似的 篩法 生成 首先從1開始寫出自然數1,2,3,4,5,6,1 就是第乙個幸運數。我們從2這個數開始。把所有序號能被2整除的項刪除,變為 1 3 5 7 9 把它們縮緊...