黑马程序员技术交流社区

标题: 这个程序怎么改进? [打印本页]

作者: HM张博文    时间: 2013-5-28 14:31
标题: 这个程序怎么改进?
本帖最后由 HM张博文 于 2013-5-31 09:16 编辑
  1. class Prime2
  2. {
  3. public static void main(String[] args)
  4. {
  5. int i,j,count=0;
  6. for( i=2;i<100;i++)
  7. {
  8. for( j=2;j<Math.sqrt(i);j++)
  9. {
  10. if(i%j==0)
  11. break;

  12. }
  13. if((i%j)!=0)
  14. {
  15. System.out.println(i);
  16. count++;
  17. }
  18. }
  19. System.out.println("素数个数为"+count);
  20. }

复制代码
上面是一个求素数的程序。但是按上面的程序,2就不会被判定为素数,输出是从3开始的。我知道可以定义一个isPrime的函数,但我这里希望不定义函数,直接在这段程序里面改,这段程序能改好么?[qq]9876997[/qq]

作者: Jacky_Chen1990    时间: 2013-5-28 14:54
消灭0回复作战。
作者: 赵崇友    时间: 2013-5-28 19:52
本帖最后由 赵崇友 于 2013-5-28 19:55 编辑

给你个我写的求素数的代码:希望对你有所帮助。我这是从101-200的,大同小异。哪地方不懂,可以问我。
  1. /*
  2.          * 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
  3.          * 则表明 此数不是素数,反之是素数。
  4.          */
  5.         @Test
  6.         public void exercice2() {
  7.                 StringBuilder sb = new StringBuilder();
  8.                 int count = 0;
  9.                 for (int x = 101; x <= 200; x++) {
  10.                         boolean flag = false;
  11.                         for (int y = 2; y <= Math.sqrt(x); y++) {
  12.                                 if (x % y != 0) {
  13.                                         continue;
  14.                                 } else {
  15.                                         flag = true;
  16.                                         break;
  17.                                 }
  18.                         }
  19.                         if (!flag) {
  20.                                 count++;
  21.                                 sb.append(x + ",");
  22.                         }

  23.                 }
  24.                 sb.deleteCharAt(sb.length() - 1);
  25.                 System.out.println("101-200之间的素数有" + count + "个!分别为:");
  26.                 for (int i = 0; i < sb.length(); i++) {
  27.                         System.out.print(sb.charAt(i));
  28.                 }

  29.         }
复制代码

作者: 韩明海    时间: 2013-5-28 21:32
if((i%j)!=0)你本意是将
if(i%j==0)
break; 的情况过滤掉,但是2特殊值,要特殊处理。
if(Math.sqrt(i)<2||(i%j)!=0)
作者: 袁梦希    时间: 2013-5-30 10:47
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名
作者: HM张博文    时间: 2013-5-31 09:17
袁梦希 发表于 2013-5-30 10:47
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名 ...

袁版主非常给力啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2