素數判斷及篩法

2021-07-22 09:40:13 字數 1486 閱讀 3935

單個素數判斷

//素數判斷(小資料)

int prime(int n)

//miller-rabin(大素數判定) 單個數字n複雜度15*log(n)

int mr[30] = ;

//此陣列為測試用的a,這12個可測所有的long long int;

lli miller_rabin(lli n)

if(x != 1) return false;

}return true;

}

區間素數篩

//厄拉多塞素數篩法,複雜度》o(n*log(log(n)))

bool mark[maxn];

void sieve_prime()

//尤拉素數篩法複雜度o(n)

bool isprime[maxn];

lli primelist[maxn],primecount = 0;

void eular_sieve(lli n)

for(int j = 1; j <= primecount; j ++)

}}

素數篩法的應用

help hanzo

題意就是求[a,b]區間內的素數個數(1 ≤ a ≤ b < 231, b - a ≤ 100000);

很明顯,如果直接篩肯定不行……,見**:

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pi acos(-1.0) #define maxn (500000 + 5) #define mol 1000000000 + 7 #define lowbit(x) (x & (-x)) using namespace std; typedef long long int lli; bool flag[100000 + 20]; bool isprime[maxn]; lli primelist[maxn],primecount = 0; void eular_sieve(lli n) for(int j = 1; j <= primecount; j ++) } } int main() for(int i = 0;i <= n;i ++) if(flag[i]) cnt ++; printf("case %d: %d\n",case,cnt); } return 0; }

素數判斷及篩法

素數 prime number 又稱質數,有無限個。素數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。問法1 給定乙個數n,判斷n是不是素數 一 暴力列舉 列舉2 n 1分別當做除數,判斷是否能整除,如果某個數能把n整除,那麼就說明n不是素數,如果所有都不能整除,那麼n就是素數。注 n...

數論 多種素數判斷法及素數篩法

水了一篇啊.眾所周知,大於等於 2 的僅含有 1 和自身這兩個因子的正整數被稱作素數 故只要判斷在 2,n 1 範圍內是否存在其它因子,就可以判斷 n 是否為素數了 無腦判斷法直接從 2 for到 n 1 稍微優化下可以縮減到 2,frac n 2 但這個方法時間複雜度為 o n 可以發現,如果某個...

素數判斷(篩法)

最簡單寫法 int isprime int n for int i 2 i n i return1 初步優化 乙個數的因數是成對出現的,其中乙個因數在開方後的前面乙個在開方後的後面,所以只需判斷它前面的數就可以了,如果前面都沒有,那麼它後面更不會有.這樣就可以減少迴圈次數.int isprime i...