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);//輸出素數對的個數
}
}