黑马程序员技术交流社区

标题: 跟大家分享一个求质数非常简单的方法 [打印本页]

作者: java—family    时间: 2014-8-20 11:57
标题: 跟大家分享一个求质数非常简单的方法
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/*求质数的思路:质数的定就是:只能被1和他自己整除的数。
*        步骤:1定义一个for循环,里面定义两个变量,一个表示:他能被多少个整数整除,另一个表示:要遍历的被除数;
*            2再定义一个for循环,变量要被整数除 的除数。
*            3判断被除数能被多少了整数整除
*            4当只能被一个数整除的时候,就是素数。*/
public class suShu_Demo1 {
        public static void main(String[] args) {
                //循环被除数,
          for(int count=0,i=2;i<100;i++){
                  //循环除数
                    for(int k=2;k<=i;k++){
                            //判断能被几个数整除
                          if(i%k==0)
                                  count++;}
                    //当只能被一个数整除的时候就是素数,这个数就是他本身。
                          if(count==1)
                                  System.out.println(i);
                          count=0;
         
        }
}
}  


作者: 月夜小楠    时间: 2014-8-20 12:21
赞一个!!
作者: inception    时间: 2014-8-20 12:36
看看!!!!!!!!!
作者: Imp_x    时间: 2014-8-20 12:36
循环除数那里k<i/2或者k<=Math.sqrt(i)好点吧= =不必到i这么多
作者: java—family    时间: 2014-8-20 12:40
Imp_x 发表于 2014-8-20 12:36
循环除数那里k

这代码的思想是只能被自己整除,向你说的那样写,就不能实现了。这种写法最简单。
作者: Imp_x    时间: 2014-8-20 13:02
java—family 发表于 2014-8-20 12:40
这代码的思想是只能被自己整除,向你说的那样写,就不能实现了。这种写法最简单。 ...

开始没看后面= =写法简单  但是效率相对来说比较慢{:3_55:}
作者: 华谦    时间: 2014-8-20 17:09
恩,还看得懂
作者: 渴望学习    时间: 2014-8-20 17:59
路过~~~~
作者: 永恒星空    时间: 2014-8-20 18:17
看看~~~~
作者: 明天2014    时间: 2014-8-20 19:48
我就看看,我不说话。。。
作者: 单线程xia    时间: 2014-8-20 19:55
到sqrt(i),count++ 也行啊,这个一直判断到最后效率低
作者: 伊甸拾忆    时间: 2014-8-20 20:30
导入的包是什么意思?
作者: java—family    时间: 2014-8-20 22:57
伊甸拾忆 发表于 2014-8-20 20:30
导入的包是什么意思?

那个类我写过其他代码。
作者: java—family    时间: 2014-8-20 22:59
单线程xia 发表于 2014-8-20 19:55
到sqrt(i),count++ 也行啊,这个一直判断到最后效率低

把你改进的代码看看。现在的计数机,运算速度快。
作者: 廿乙木    时间: 2014-8-20 23:01
  1. /*第七题:7、 编程打印所有的3位质数,质数特点:只能被1和其本身整除
  2. *
  3. *
  4. *
  5. *
  6. */
  7. package com.itheima;

  8. public class Text7 {

  9.         public static void main(String[] args) {
  10.                  int shu;//
  11.                  int xx;
  12.                 for (shu = 1; shu < 1000; shu++) {//遍历1到999所有的数
  13.                         for (xx = 2; xx <= shu / 2; xx++) {//遍历所有的除数。为了效率除数只取到被除数一半
  14.                                 if (shu % xx == 0)//如果有能被整出的跳过打印这个数
  15.                                         break;

  16.                         }
  17.                         if (xx > shu / 2) {//如果被除数到遍历完了则说明这个数是质数,打印即可
  18.                                 System.out.print(shu + ",");//为了方便阅读中间用,分割
  19.                         }
  20.                 }
  21.         }
  22. }
复制代码

作者: 韶山    时间: 2014-8-20 23:03
import是啥意思
作者: justin1258    时间: 2014-8-20 23:07
这是最简单的思路,但是效率不高。。
作者: Ezreal    时间: 2014-8-20 23:12
设置一个布尔变量控制判断会更简单
作者: masai158    时间: 2014-8-20 23:14
{:2_34:}  wo 是不是傻了。我既然在前几天做了一个梦。就是这个时候。这个时间。我在看你的算法题。 - -!!!!然后你的头像还不是你。。。真的要闯到鬼了
作者: Huberry    时间: 2014-8-20 23:43
廿乙木 发表于 2014-8-20 23:01

其实只要遍历到shu的开平方就行  大于shu的开平方做的比较都是无意义的
作者: 地狱天堂    时间: 2014-8-21 00:02
留名,看看
作者: Kikyou    时间: 2014-8-21 00:11
mark,谢谢楼主分享
作者: 136616244    时间: 2014-8-21 16:05
这种写法不简单    可以在for循环前面加标记,continue直接到外层循环
作者: asinzuo    时间: 2015-6-28 21:30
就这一种方法么
作者: 凶狠搞Android    时间: 2015-7-29 21:58
前来学习,数学有点差,不怎么看得懂,今晚再看看
作者: 树懒    时间: 2015-7-31 12:13
谢谢啦!学习下




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