PAT乙級-素數對猜想

題目描述:

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

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

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

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

輸入樣例:
20
輸出樣例:
4
思路分析:找出小於N的素數且相鄰的兩個數之差爲二則滿足條件。

package 素數對猜想;
import java.util.*;
public class Main {
private static int m;


public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] a=new int[n];
int count=0;
for(int i=2;i<n;i++)
{
for(int j=2;j<i+1;j++)  
{
if(i%j==0&&(i!=j))
break;
else 
{
for(int m=0;m<n;m++)
{
a[m]=i;
}
}
}if(a[m+1]-a[m]==2)
count++;
}

System.out.print(count);
}
}
編譯之後結果錯誤,先貼出來,以後修改。可能是我對java中數組的理解不到位。
下面是參考的別人博客裏的思路,這種方法降低了時間複雜度。
package 素數對猜想;
	import java.util.Scanner;
public class A {
	  public static void main(String[] args){
	        Scanner sc=new Scanner(System.in);
	        int N=sc.nextInt();
	          int count=0;
	          for(int i=N;i>4;i--){
	            if(isSuShu(i)&&isSuShu(i-2))
	              count++;
	          }
	          System.out.println(count);
	        }
	  
	  public static boolean isSuShu(int N){
	   for(int i=2; i*i <= N; ++i) 
	            if(0 == N%i) return false; 
	        return true;
	  }
}



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