等差素數列(枚舉+素數篩選法)

題目如下:

標題:等差素數列

2,3,5,7,11,13,….是素數序列。 

類似:7,37,67,97,127,157 這樣完全由素數組成的等差數列,叫等差素數數列。 
上邊的數列公差爲30,長度爲6。
這是數論領域一項驚人的成果!

2004年,格林與華人陶哲軒合作證明了:存在任意長度的素數等差數列。 

有這一理論爲基礎,請你藉助手中的計算機,滿懷信心地搜索:

長度爲10的等差素數列,其公差最小值是多少?

注意:需要提交的是一個整數,不要填寫任何多餘的內容和說明文字。


take notes:

三層循環,第一層遍歷公差,第二層遍歷首項,第三層遍歷數列內部,停止條件是cnt=10,當然還要有素數篩選法

public class Main {
	static int N = 2000000;
	static int[] vis = new int[N];
	static void pri(){
		vis[0]=vis[1]=1;
		for(int i=2;i<N;i++){
			if(vis[i]==0){
				for(int j=i+i;j<N;j+=i){
					vis[j]=1;
				}
			}
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		pri();
		int j=0;
		int cnt=0;
		main:for(int gc=1;gc<1000;gc++){
			for(int i=1;i<N-1001;i++){
				j=i;
				if(vis[i]==0){
					while(cnt<10){
						if(vis[j]==0){
							cnt++;
							j=j+gc;
						}
						else{
							cnt=0;
							break;
						}
					}
					if(cnt==10){
						System.out.println(gc);
						break main;
					}
				}
			}
		}
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章