time limit: 100ms memory limit: 65536k 有疑問?點這裡^_^
求小於n的所有素數的數量。
多組輸入,輸入整數n(n<1000000
),以0
結束。
輸出n以內所有素數的個數。
100
4
///wa了好久的題0.0 今天突然想起來了0.0 不能直接求素數的個數 會超時
///首先需要預處理,利用尤拉篩原理預處理 bool 陣列儲存是否為素數 最後遍歷加和輸出素數的個數
///accode
#include #include using namespace std;
const int maxn = 1000010;
int prime[maxn];
bool vis[maxn] = ; ///vis=0 是素數
void oula_prime()
} }
int sum = 0;
for(i=2;i<=maxn;i++)
prime[i] = sum; }}
int main()
{ int n;
oula_prime();
while(cin>>n&&n)
{ cout<
進一步降低了尤拉篩的時間複雜度o(nlogn)
尤拉篩法求素數
尤拉篩法通過不篩除篩除過的數來將時間複雜度優化到 尤拉篩法求素數 首先,我們知道當乙個數為素數的時候,它的倍數肯定不是素數。所以我們可以從2開始通過乘積篩掉所有的合數。將所有合數標記,保證不被重複篩除,時間複雜度為o n 比較簡單 求小於等於n的素數的個數 include includeusing ...
尤拉篩法求素數
埃氏篩法確實大大提高了求素數的效率,但是會有很多合數被重複刪去,在資料大小超過1e8的時候會支撐不住。尤拉篩法便有效先看 解決了這個問題,將時間複雜度降低到了o n 先看 int ans 0,pri max n 尤拉篩法 bool vis max n void getpri vis i pri j ...
數論 素數 素數相關基礎 尤拉函式與尤拉定理
尤拉定理與尤拉函式在數論方面的應用十分廣泛,幾乎所有的形如a n k 1的東西都可以往上靠。這裡暫時不細說怎麼用,先講基礎內容。1 尤拉函式 尤拉函式 n 表示不超過n且與n互素的正整數的個數 計算公式為 n n 1 1 p1 1 1 p2 其中p1,p2 為n的質因數 2 尤拉定理 若a,n是正整...