題目描述:
讓我們定義 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;
}
}