黑马程序员技术交流社区

标题: 获取100到200之间的素数个数并打印出来 [打印本页]

作者: 亦如梦幻泡影    时间: 2015-8-10 21:39
标题: 获取100到200之间的素数个数并打印出来
/**
* 判断101-200之间有多少个素数,并输出所有素数。
*  程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数)(sqrt(这个数)表示的是这个数的平方根),
* 如果能被整除,则表明此数不是素数,反之是素数。
*/
public class Test02 {
        public static void main(String[] args) {
                int count = 0;
                for (int i = 101; i < 201; i++) {
                        if (isPrime(i)) {
                                System.out.print(i+"\t");
                                count++;
                                if (count%5==0) {
                                        System.out.println();
                                }
                        }
                }
        }
        public static boolean isPrime(int num){
                boolean flag = true;
                for (int i = 2; i < Math.sqrt(num); i++) {
                        if (num%i!=0) {
                                flag = false;
                        } else {
                                flag = true;
                        }
                }
                return flag;
        }
}

作者: 唧唧歪不正    时间: 2015-8-10 21:44
顶。。。。
作者: drp000    时间: 2015-8-10 22:02
为什么是除2到sqrt(这个数)呢?
作者: 氕氘氚    时间: 2015-8-10 22:09
不知道质数的数学证明,直接for循环2-自己就行了
  1. public static boolean isPrime(int num){
  2.                 boolean flag = true;
  3.                 for (int i = 2; i < num; i++) {
  4.                         if (num%i!=0) {
  5.                                 flag = false;
  6.                         } else {
  7.                                 flag = true;
  8.                         }
  9.                 }
  10.                 return flag;
  11.         }
复制代码

作者: 酒倌浪人    时间: 2015-8-10 22:21
点个赞~~~
作者: 阮文江    时间: 2015-8-10 22:28
学习学习!
作者: 亦如梦幻泡影    时间: 2015-8-11 17:43
drp000 发表于 2015-8-10 22:02
为什么是除2到sqrt(这个数)呢?

比如这个数是36 ,除以3和除以12都能排除这个数不是素数,所以只用到这个数的平方根就行
作者: 亦如梦幻泡影    时间: 2015-8-11 17:55
氕氘氚 发表于 2015-8-10 22:09
不知道质数的数学证明,直接for循环2-自己就行了

这个可以啊  只是如果给你一个很大的数要你判断是否为素数,而这个数恰好是一个素数, 在判断是否是素数的时候,for循环要进行的次数是不是有点多啊
作者: Wqi    时间: 2015-8-11 20:03
本帖最后由 Wqi 于 2015-8-11 20:05 编辑

Math.sqrt()的返回值是double吧。。 for (int i = 2; i <= (int)Math.sqrt((double)num); i++)
作者: 亦如梦幻泡影    时间: 2015-8-25 10:49
Wqi 发表于 2015-8-11 20:03
Math.sqrt()的返回值是double吧。。 for (int i = 2; i

自动转型




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