(基本數論)素數篩選與判斷

2022-07-27 03:03:08 字數 1486 閱讀 2048

這種方法就是將給出的數判斷能否找到處1以及它本身以外的因數。

**樣例

#include using namespace std;

bool f(int n)

return 1;

}int main()

埃氏篩法就是從2開始篩掉2的倍數(必須從2倍開始)往下依次進行。

**樣例

#include using namespace std;

const int 1e6;

bool book[maxn};

void is_not_prime(int n)

}}int main()

return 0;

}

尤拉篩法其實是對埃氏篩法的優化,在埃氏篩法中有多於3個因數的合數會被重複篩一次這樣增加了不必要的操作。尤拉篩則可以彌補這一不足之處(見下圖)

**樣例

#includeusing namespace std;

const int maxn = 1e7+10;

bool book[maxn];

int prime[maxn];

int cnt;

void init(int n)

for(int j = 0; j < cnt && prime[j]*i <= n; j++)

}}int main()

return res;

}ll mod_pow(ll a,ll b,ll n)

return res;

}bool miller_rabin(ll n)

for(i = 0;i < 10; i++)

if(x!=1)

return false;

}return true;

}int main()}}

return 0;

}

**樣例

#include using namespace std;

const int maxn = 1e6+10;

bool book[maxn];

int a[maxn];

void init(int n)

}else

a[i] = a[i-1];

}}int main()

}int ans = 0;

for(int i = 0;i <= r-l;i++)

if(book[i]==0)

ans++;

printf("%d\n",ans);

return 0;

}

素數判斷與素數篩選法

方法一 直接判斷,思想簡單,實現比較簡單,但是複雜度過高bool isprime int a return true 方法二 素數篩選法 eratosthenes 篩法 只有素數才能當篩子 篩掉對應的倍數,不超過要求的範圍即可 遍歷一遍 void getprime int n 從i i開始計算 j ...

判斷 篩選 素數

舉例 篩選從1 n的所有素數 第一種 暴力判斷,無優化。直接根據素數的定義判斷即可 include intmain for int i 2 i n i for int i 1 i n i if prime i printf d n i 第二種 素數的倍數一定不是素數,對其進行標記。最後遍歷一遍陣列,...

篩選法判斷素數

常規的判斷1 n以內的素數的時間複雜度為o n sqrt n 在n很大的時候時間很長,所以需要別的方法來判斷素數。這裡介紹篩選法。1 申請乙個陣列bool prime n 1 初始化所有的奇數下標為true,偶數下標為false 2例外 2 for int i 3 i sqrt n i 2 3 最後...