验证歌德巴赫猜想 java代码
package cl;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class GoldBach {
public static boolean[] isPrime =null;
//求n内的所有素数
public static void prime(int n){
isPrime = new boolean[n+1];
for(int i=2;i<=n;i++){
isPrime[i]=true;
}
for(int i=2;i<=n;i++){
if(isPrime[i]){
for(int j=2;j*i<=n;j++){
isPrime[i*j]=false;
}
}
}
}
//验证偶数N是否可以被分解成两个素数相加
public static boolean canadd(int n){
for(int i=2;i<=n/2;i++){
if(isPrime[n-i])
return true;
}
return false;
}
//写入文件
public static void writeFile(int[] num,long[] time,String addir)
throws IOException{
File f = new File(addir);
FileWriter w = new FileWriter(f,true);
w.write("num time");
for(int i=0;i<num.length;i++){
w.write("\n");
w.write(num[i]+" "+time[i]);
}
w.close();
}
//求证数组中的数可以符合哥德巴赫猜想
public static void main(String[] args) throws IOException{
int[] num = new int[]{200,400,600,800};
long[] time = new long[num.length];
long startTime = System.nanoTime();
//获取小于数n的质数
prime(num[num.length-1]);
int index=0;
for(int i=4;i<=num[num.length-1];i+=2){
if(!canadd(i)){
System.out.println(i+" can't split");
}
if(i==num[index]){
time[index++]=System.nanoTime()-startTime;
}
}
//将对应时间写入文件
writeFile(num,time,"test.csv");
//控制台输出
/*for(int i=0;i<num.length;i++){
System.out.println(num[i]+" "+time[i]);
}*/
}
}