poj 2689素數篩選

2021-07-04 08:28:01 字數 809 閱讀 9726

這道題目我就不貼題目了,就是素數篩選題。

這道題目差點讓我崩潰,自己太菜的原因,提交了很多次,總是runtime error ,後來才知道,素數篩選的範圍這能是2^16,然而這道題給的範圍超出了int的上界,所以,必須要用另外一種方法來篩選,看了人家的部落格,感覺方法超好。這道題有個突破點,就是區間在100000之內,所以,我們找到它們的合子的位置即可。

先篩出50000以內的素數,然後再在給定的區間內以剛剛的素數為基底,篩出區間內的素數。篩的過程中算出區間左值是最小素數的幾倍,然後然後不是整數倍,就往前加1(否則算出的數會不在這個區間裡,沒意義),然後這個整數倍乘以素數已經大於右邊了,那就可以直接退出了。

這裡寫**

#include

#include

#include

using

namespace

std;

const

int n=50000;

const

int max=999999999;//定義為無窮大

int r[1000000],a[n+100],b[n+100],z;

int main()

while (cin>>l>>u)

int k=-1;

for (i=0;i<=u-l;i++)//這裡就是遍歷找相鄰最近和最遠的,其實這裡理解容易些

if (!r[i])

if (disif (i+l!=1) k=i;

}if (max<0)

希望各位大牛們多多指教!

大區間素數篩選 POJ2689

題意 給乙個區間 l,u 1 l u 2,147,483,647 u l 1000000,求出 l,u 內距離最近和距離最遠的素數對。由於l,u都小於2 32,所以區間內的合數的最小質因子必然小於2 16,所以先篩出2 16以內的素數,用篩出來的素數去篩 l,u 內的合數。然後把 l,u 內的素數儲...

poj 2689 區間素數篩選

由於給出的l和u太大,直接打表是不可能了。但u l 1e6,u 1e9,可以先篩出 0,sqrt u 內的素數,再以此去篩 l,u 內的素數,接著求出相鄰距離最短和最遠的一對素數就行了,這步就簡單了。如下 include include include include include include...

poj 2689 (素數二次篩選)

sample input 2 17 14 17sample output 2,3 are closest,7,11 are most distant.there are no adjacent primes.找出給定範圍內,距離最遠和最近的素數。不停超時 給的上界很大,所以全處理肯定不行。先處理sq...