因为上机实验,自己写了这个程序。以前学过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;
}
}
}
}
}

解决方案 »

  1.   

    算法是没有什么问题,只是代码不够简洁,而且你还不习惯使用boolean并且可以考虑优化isPrime判断,首先循环应该是
    int sqrt = (int)Math.sqrt(t);
    for (int i = 2; i <= sqrt; i++)
    而且可以考虑将判断为素数的数字保存起来,再保存已经计算过的最大t值,
    以后isPrime就先从这个素数集合开始判断,
    如果不在集合中并且t 大于已经计算过的最大t值才继续往下计算
      

  2.   

    "而且你还不习惯使用boolean",呵呵,是啊,以前学C就不习惯用,现在还这样,以后得改了。
    恩,在网上也看到过先建立一个素数集合的,回去再添加一个方法把吧,实现这个功能……
    谢谢,呵呵。