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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JYcainiao 中级黑马   /  2015-10-17 20:58  /  357 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//求出101-200之间的素数的个数,并打印出来
/*
思路  首先 素数不能被除1和本身意外的任何数整除  除数定义为num
                1.除数从2----num-1 被除数定义为a 当num能被a整除时,结束当前循环     当num不能被a整除时,a+1  以此类推 直到 a= num-1
                当同时满足 num % a != 0 && a == num/2  时,打印该数字, 计数器+1

                简化  因为一个数除1和它自身外,最大的因数不会num/2还大,所以定义  a<=num/2

*/


class Sushu {
        public static void main(String[] args) {
                int connt = 0;                                                                        //定义一个计数器,变量名为connt  用来记录素数的个数
                System.out.println("101-200之间的素数有");
                for (int num = 101; num<=200; num++) {
                                for (int a = 2; a<=num/2; a++) {                        //定义一个数字,从2开始  因为素数不能被除1和本身意外的任何数整除
                                                if (num % a == 0) {                                //如果num能被2整除,直接结束该次循环  a+1
                                                break;        //这里这个为啥不能用continue啊?
                                        }
                                        if (num % a != 0 && a == num/2) {        //如果num一直不能被a整除,并且a自增至num/2  可以证明这个数字为素数
                                                System.out.print(num+",");                //打印这个数字
                                                connt++;                                                //计数器+1
                                                }               
                                               
                                }
                               
                }               
                System.out.println();
                System.out.println("素数的个数为:"+connt);
        }
}






                                       

4 个回复

正序浏览
JYcainiao 来自手机 中级黑马 2015-10-18 13:02:35
报纸
往事如风555 发表于 2015-10-18 00:25
楼主,你试除的范围还是太大了,从2比到num的平方根为止即可。比如要算10000以内的素数,只需比2到100,不 ...

被除数自增到除数的一半吧,平方根当然更好,但是还没学到那里呢……不会算平方根……
回复 使用道具 举报
看错题,我算的是1-100的。将循环改为 int i = 101; i <= 200;i++
回复 使用道具 举报
楼主,你试除的范围还是太大了,从2比到num的平方根为止即可。比如要算10000以内的素数,只需比2到100,不需要比到5000的。这样提高效率。

//程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),
//如果能被整除, 则表明此数不是素数,反之是素数。
public class ShuShu {
        public static void main(String[] args) {
                int n = 0;
                for (int i = 1; i <= 100; i++) {
                        if (isPrime(i)) {
                                System.out.println(i);
                                n++;
                        }
                }
                System.out.println("素数的个数是:"+n);
        }
        // 判断素数的方法,如果是素数,返回true。
        private static boolean isPrime(int n) {
                if (n >= 1 && n <= 3) {
                        return true;
                } else {
                        for (int i = 2; i <= Math.sqrt(n); i++) {
                                if (n % i == 0) {
                                        return false;
                                }
                        }
                }
                return true;
        }
}
回复 使用道具 举报
continue 结束本次循环,继续下次循环,没跳出啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马