打算重新刷一下數論題,忘了很多了,水平也很差,此題入手就不順了,刷了乙個早上,只是乙個簡單
的素數應用罷了。題意:找出區間長度不超過10^6的最近的素數和最遠的素數(相鄰的),
演算法:數在int範圍內,不可能全部一次篩出,所以先篩出50000以內的質數,其他整數(若是合數)必然
至少含有乙個50000以內的質因子,所以,對每次區間,再篩,篩去區間中這些質數的倍數即可。
未1a原因:
1,題意要看清!
2,注意細節問題!以及特殊情況!
3.注意邊界!雖然是整數範圍,剛好在上界時候在for裡迴圈再加的話就越界了,無法判斷!
#include//49ms
#include#include#includeusing namespace std;
bool notpri[50001]; vectorpri;
long long f,l;
void getpri() //先篩出部分質數
}int nowpri[1000001]; //將區間f,l平移到0--l-f。
int main()
int len=pri.size();
for(int i=0;imaxdis)
if(dis
poj 2689素數篩選
這道題目我就不貼題目了,就是素數篩選題。這道題目差點讓我崩潰,自己太菜的原因,提交了很多次,總是runtime error 後來才知道,素數篩選的範圍這能是2 16,然而這道題給的範圍超出了int的上界,所以,必須要用另外一種方法來篩選,看了人家的部落格,感覺方法超好。這道題有個突破點,就是區間在1...
大區間素數篩選 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...