思路:
如果我們要篩出 [1, n] 內的所有素數,使用 [1, √n] 內的素數去篩就可以了
設bool型陣列 a,a[i] 表示 i 是否被某個素數篩過
從 2 開始列舉每個數 i:
若 a[i] = false,表示 i 沒有更小的素因子,從而知道 i 是素數。列舉 i 的所有倍數 j,令 a[j] = 1
**如下:
#include#includeusing
namespace
std;
intn,m;
bool a[10050000
];int
main()
intj;
for(int i=1;i<=m;++i)
}
然後附上線性篩【畢竟是線性複雜度2333】
**
#include#includeusing
namespace
std;
int n,m,num,su[10050000
];bool a[10050000
];int
main()
}intj;
for(int i=1;i<=m;++i)
}
埃氏篩法 線性篩素數 洛谷P3383
如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的個數。接下來m行每行包含乙個不小於1且不大於n的整數,即詢問該數是否為質數。輸出格式 輸出包含m行,每行為yes或no,即依次為每乙個詢問的結果。輸入...
質數篩 埃氏篩
我們來看這麼一道問題 給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 n 10000000,m 100000 首先很容易聯想到使用列舉法來確定題目的整體框架 for i 1 m else 關鍵在於質數判斷部分。質數的判斷問題我們可以從定義出發。質數,又稱素數,是除了1...
埃氏篩法 素數篩
埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...