黑马程序员技术交流社区

标题: 素数问题,请指导 [打印本页]

作者: 范建海    时间: 2015-1-18 11:59
标题: 素数问题,请指导
如果找从某个数m到n之间的素数,是从1到它本身吗?还是到根号它呢?
作者: Novice.Jin    时间: 2015-1-18 12:30
你明白什么叫素数吗
作者: sq_jun    时间: 2015-1-18 12:32
素数不就是只能被1和它本身整除嘛,从2开始判断,一直逐个整除到他本身前面一个数,只要能被整除就说明不是素数,否则就是素数,再打印出来就好了
作者: 范建海    时间: 2015-1-18 14:16
还得麻烦仁兄帮忙解释一下
作者: sq_jun    时间: 2015-1-18 14:30
范建海 发表于 2015-1-18 14:16
还得麻烦仁兄帮忙解释一下

还有哪里不懂的
作者: shenshuangxi    时间: 2015-1-18 22:17
从m开始遍历直到n,判断如果这个数如果只能被1和自身整除,那么这个数就是素数(用两个嵌套循环)
作者: wdhm5423    时间: 2015-1-18 22:47
两中方法都是可以的。
这样理解:如果一个数n不是素数,那他肯定是两个因数相乘,有可能两个因数都大于√n吗?肯定不可能,要是都大于,那不就大于√n * √n=n了。所以如果n不是素数,那他肯定有一个因数<=√n。反过来,如果从1除到√n还没有整除的,那就是素数咯。所以两个方法只是时间问题,其实从1除到√n就可以了。当然,你要从1,到n也是行的。
作者: 史云龙    时间: 2015-1-18 23:14
代码是从素数的概念上来入手,大家还可以加上数学的判断思路
在一般领域,对正整数n,如果用小于或等于 的所有质数去除,均无法整除,则n为质数。
  1. public class Demo{
  2.         public static void main(String[]args){
  3.                 int m=10;
  4.                 int n=20;
  5.                 boolean flag=false;
  6.                 for(int i=m;i<=n;i++){
  7.                         for(int j=2;j<i;j++){
  8.                                 if(i%j==0){
  9.                                         System.out.println(i+"不是素数");
  10.                                         flag=false;
  11.                                         break;
  12.                                 }else{
  13.                                         flag=true;
  14.                                 }
  15.                         }
  16.                         if(flag){
  17.                                 System.out.println(i+"是素数");
  18.                         }
  19.                 }
  20.         }
  21. }
复制代码





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