黑马程序员技术交流社区

标题: 问题如下 [打印本页]

作者: 我是三星    时间: 2015-9-13 23:17
标题: 问题如下
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class Prog2{
        public static void main(String[] args){
                int m = 1;
                int n = 1000;
                int count = 0;
                //统计素数个数
                for(int i=m;i<n;i++){
                        if(isPrime(i)){
                                count++;
                                System.out.print(i+" ");
                                if(count%10==0){
                                        System.out.println();
                                }
                        }
                }
                System.out.println();
                System.out.println("在"+m+"和"+n+"之间共有"+count+"个素数");
        }
        //判断素数
        private static boolean isPrime(int n){
                boolean flag = true;
                if(n==1)
                  flag = false;
                else{
                        for(int i=2;i<=Math.sqrt(n);i++){
                        if((n%i)==0 || n==1){      \\此处如果换成if(n%==0)输出结果与原来一致,想问一下  || n==1 在这里的作用?
                                flag = false;      
                                break;
                        }
                         else
                           flag = true;
                  }
                }
                return flag;
        }
}




作者: 夸克    时间: 2015-9-13 23:17
你把代码格式写清楚点读起来就会清楚了,那里不需要n==1,
if(n==1)
{
    flag=false;
}
else
{
   //这里边怎么可能n==1,这不就是if..else语句块么
}

作者: 菊花爆满山    时间: 2015-9-14 00:11
我认为没有作用 多余  如果n为1不会判断到这一步
作者: 刘凯1213    时间: 2015-9-14 09:27
此处 n==1 没有任何用,因为上面在 if 中已经判断了 n==1,如果 n=1了那么是不会到这个方法中的,所以再判断 n==1是无用的
作者: 技术小牛    时间: 2015-9-14 09:56
如果上面没有if(n==1)的判断  这儿是需要|| n==1的,因为1既不是素数也不是合数。所以是需要判断的,但是你前面已经判断了。所以下面就不用再判断了。希望您能采纳,临近考试我的黑马币还很少。十分需要啊
作者: 倦鸟识山    时间: 2015-9-14 09:56
上面判断过一次 所以没有用
作者: kime    时间: 2015-9-14 11:37
n==1没有作用
作者: a334    时间: 2015-9-14 20:10
理论上讲,那个位置 n已经是不等于1了~~因为上面判断 n==1 不成立 然后跳到else语句里去了
作者: 15173139267    时间: 2015-9-14 22:36
/**为什么你要这样玩。需求分析是从课本上面弄下来的,还是老师固定成这样的需求分析。  我看你代码的时候一开始都没有看懂。
*/
/**
n==1  当然是没有用的,前面已经进行了判断.当n=1时,你程序设计就是已经开始跳到返回(return)这里来了。
*/
//程序分析:判断素数的方法,获取一个数值,然后将这个数值除以1和它本身之外的值。
public class Prog2{
        public static void main(String[] args){
                int count = 0;
                //统计素数个数
                for(int i=1;i<1000;i++){
                        if(isPrime(i)){
                                count++;
                                System.out.print(i+" ");
                                if(count%10==0){
                                        System.out.println();
                                }
                        }
                }
                System.out.println("在1和1000之间共有"+count+"个素数");
        }
        //判断素数
        private static boolean isPrime(int n){
                boolean flag = false;
                if(n>1){
                        for(int i=1;i<n;i++){
                                if(i!=1){
                                        if(n%i == 0){
                                                flag = false;
                                                break;
                                        }else if(n == ++i){
                                                flag = true;
                                        }
                                }
                        }
                }
                return flag;
        }
}

作者: heshiwei    时间: 2015-9-15 10:45
n==1的意思就是:当传入的参数为1时,直接判定这是素数。
作者: fengchaohui    时间: 2015-9-16 23:40
就是可以的啊    你注释符号错了   第二十六行
作者: fengchaohui    时间: 2015-9-16 23:42
fengchaohui 发表于 2015-9-16 23:40
就是可以的啊    你注释符号错了   第二十六行

还有n==1没用啊
作者: 霹雳三口组    时间: 2015-9-21 23:14
代码有点长
作者: charryxiaocai    时间: 2015-9-22 20:39
在这里没有用  
自己做了一下上面的题目
        int m = 0;
                for (int i = 101; i < 201; i++) {
                        for (int j = 2; j < i/2+1; j++) {
                                if((i%j == 0)){                                  
                                          break;
                                }
                                if(j == (i/2))  m++;
                        }
                }
                System.out.println("一共:" + m + "  个素数");

作者: fcl13761179064    时间: 2015-9-25 19:03
如果上面没有if(n==1)的判断  这儿是需要|| n==1的,因为1既不是素数也不是合数。所以是需要判断的,但是你前面已经判断了。所以下面就不用再判断了。




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