A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM张博文 高级黑马   /  2013-5-28 14:31  /  1065 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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的函数,但我这里希望不定义函数,直接在这段程序里面改,这段程序能改好么?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
消灭0回复作战。
回复 使用道具 举报
本帖最后由 赵崇友 于 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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
if((i%j)!=0)你本意是将
if(i%j==0)
break; 的情况过滤掉,但是2特殊值,要特殊处理。
if(Math.sqrt(i)<2||(i%j)!=0)

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名
回复 使用道具 举报
袁梦希 发表于 2013-5-30 10:47
楼主你好,如果帖子没问题了,那么请把帖子的类型改为“已解决”。如果不会改,请看我的个性签名 ...

袁版主非常给力啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马