PAT乙級Java實現_1007. 素數對猜想 _附詳細解題註釋_07

1007. 素數對猜想 (20)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
CHEN, Yue

讓我們定義 dn 爲:dn = pn+1 - pn,其中 pi 是第i個素數。顯然有 d1=1 且對於n>1有 dn 是偶數。“素數對猜想”認爲“存在無窮多對相鄰且差爲2的素數”。

現給定任意正整數N (< 105),請計算不超過N的滿足猜想的素數對的個數。

輸入格式:每個測試輸入包含1個測試用例,給出正整數N。

輸出格式:每個測試用例的輸出佔一行,不超過N的滿足猜想的素數對的個數。

輸入樣例:
20
輸出樣例:
4

----------------------------------------------------------------------------------------------------------------

/*素數表的創建思路:
 * 建一個數組,用數組索引表示數字,值爲0表示該數不是素數,值爲1表示該數是素數。
 * 初始化數組,將數組裏的元素都賦值爲1
 * 從索引2開始往後遍歷(0和1不是素數),只要索引對應的值爲1,則將它的倍數索引都賦值爲1。
*/
import java.util.Scanner;
import java.util.Arrays;
public class PAT_B_1007//在PAT平臺需將類名改爲Main
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int num = in.nextInt();//接收輸入的數字
		
		int[] prime = new int[100005];//代表素數的數組,索引對應的值爲1的是素數
		Arrays.fill(prime,1);//將數組初始化填充1
		for(int i = 2; i < prime.length; i++)
		{//從索引2開始往後遍歷(0和1不是素數),只要索引對應的值爲1,則將它的倍數索引都賦值爲1。
			if(prime[i] == 1)
			{
				for(int j = i + i; j < prime.length; j=j+i)
					prime[j] = 0;
			}
		}
		
		int sum = 0;//計算素數對
		for(int i = 2; i <= num-2; i++)
		{//從2開始往後遍歷,如果某索引對應的值爲1,切索引+2對應的值也是1,則構成一對素數對
			if(prime[i] == 1 && prime[i+2] == 1)
				sum++;
		}
		
		System.out.println(sum);//輸出素數對的個數
	}
}

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