關於素數打表跟判斷素數的一些方法

2022-02-19 23:03:44 字數 1458 閱讀 2248

判斷乙個素數是否為素數:

1:2-n-1。。。for暴力判斷;

2:sqrt(n) 判斷;

3:乙個我也不知道為什麼的**,總之蠻快的

int prime(int

n)

return1;

}

4:判斷乙個大素數的公尺勒拉賓素數測試

複雜度:o(k*log(n))k是測試的次數

素數打表:

1 埃拉特斯特尼篩法複雜度o(n loglog(n));

for(i=0;i)

a[i]=1

; a[

0]=0

; a[

1]=0

;

for(i=2;i*i)

}return cnt;//

返回小於n的素數的個數

}

小於n的素數個數模版(n很大):

//n^(2/3)

#include#include

using

namespace

std;

#define ll long long

const

int n = 5e6 + 2

;bool

np[n];

intprime[n], pi[n];

intgetprime()

}return

cnt;

}const

int m = 7

;const

int pm = 2 * 3 * 5 * 7 * 11 * 13 * 17

;int phi[pm + 1][m + 1], sz[m + 1

];void

init()

}int

sqrt2(ll x)

intsqrt3(ll x)

ll getphi(ll x,

ints)

return getphi(x, s - 1) - getphi(x / prime[s], s - 1);}

ll getpi(ll x)

ll lehmer_pi(ll x)

return

sum;

}int

main()

return0;

}

#include #define ll long long

using

namespace

std;

ll f[

340000],g[340000

],n;

void

init()

for(j=m;j>=i*i;--j)g[j]-=g[j/i]-g[i-1

]; }

}int

main()

return0;

}//n^(3/4)

關於素數的一些題目

看了czyuan的總結,決定先找幾道素數的題目玩玩.首先,判定素數的方法除了暴力列舉到根號n外還有篩法,不要小看,他可以演變出一些題目 for i 2 i maxn i 短短幾行,可以在0.9s左右篩出一千萬內的素數,應該夠用了 這個題 是篩素數的好題,當然要先知道威爾遜定理.不知道的話搜一下吧.這...

素數判定的一些討論(Miller Rabin演算法)

很久沒有寫部落格了。最近軍訓加開學,感覺刷題速度有降低,要補一補。回歸正題,正式進入數論階段,討論一下關於素數判定的那些事。直接根據素數的定義列舉 i 從2到 n 1 如果n i 0 n 為合數。時間複雜度 o n bool is prime int n 發現若存在 i n 使得n i 0,則必有n...

素數判定的一些討論(Miller Rabin演算法)

一類問題 判定乙個整數n n 1 是否為素數。演算法一 直接根據素數的定義列舉從到,如果n i 0n為合數。時間複雜度 o n int is prime int n 演算法二 發現若存在使得n i 0,則必有n n i 0。所以只需列舉從到即可。時間複雜度 int is prime int n 如果...