日期:2014-05-20  浏览次数:20799 次

用JAVA编程验证哥德巴赫猜想
因为上机实验,自己写了这个程序。以前学过C/C++,可能是根深蒂固,感觉写出来的JAVA程序似乎和用C写区别不大,是现在还没有体现出来?呵呵。
不知道各位对这个编程问题有没有什么好的方法?觉得自己方法有点笨,呵呵。
import   java.io.*;
public   class   Prime1{
public   static   int   isPrime(int   t){
                  for(int   i=2;i <t;i++)
if(t%i==0)
return   0;
return   1;
}//判断一个给定的数是否为素数。
public   static   void   main(String   args[]){
int   i,j,k,m,n,o,p;
int   line=5;
int   MAX;//上届
System.out.println( "请输入您要计算的偶数的上界: ");
try{
                  BufferedReader   in=new   BufferedReader(new   InputStreamReader(System.in));
                                    String   t=in.readLine();
MAX=Integer.valueOf(t).intValue();
}catch(Exception   exc){
System.out.println( "您的输入不正确! ");
return;
}//输入上届
for(i=4;i <=MAX;i=i+2){
j=i/2;
k=isPrime(j);
if(k==1){
line++;
if(line%5==0)
System.out.println();
System.out.print( "       "+i+ "= "+j+ "+ "+j);
}//判断该数的一半是否为素数
else{
for(m=j-1;m> 0;m--){
n=isPrime(m);
if(n==1){
p=i-m;
o=isPrime(p);
if(o==1){
line++;
if(line%5==0)
System.out.println();
                                                                                                              System.out.print( "       "+i+ "= "+m+ "+ "+p);
break;
}//如其一半不为素数,则向前查找一个素数,求原数减去该素数所得时候为素数。
}
continue;
}
}
}
}
}

------解决方案--------------------
语法不是问题
主要在一个思路上面
算法一样,但是整体的思路已经不一样了
至少你把方法放在了一个类里
而不是单纯的一个文件里
------解决方案--------------------
算法是没有什么问题,只是代码不够简洁,而且你还不习惯使用boolean

并且可以考虑优化isPrime判断,首先循环应该是
int sqrt = (int)Math.sqrt(t);
for (int i = 2; i <= sqrt; i++)


而且可以考虑将判断为素数的数字保存起来,再保存已经计算过的最大t值,
以后isPrime就先从这个素数集合开始判断,
如果不在集合中并且t 大于已经计算过的最大t值才继续往下计算