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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

hua2319

中级黑马

  • 黑马币:59

  • 帖子:159

  • 精华:0

疑问:下题有两个解决方案,方案一虽然代码简洁但执行效率会比方案二的高吗?
题目:分析以下需求,并用代码实现:(有难度,可选做!)
        (1)打印1-100之间的所有素数及个数
        (2)每行输出5个满足条件的数,之间用空格分隔
        (3)如果一个大于1的自然数,这个数只能被1和其本身整除,这个数就叫素数。
        (4)如:2 3 5 7 11
------------------方案一--(疑问:方案一虽然代码简洁但执行效率会比方案二的高吗?)-------------
class Test_8 {   //
        public static void main(String[] args) {       
                int count = 0;                      //定义变量count用记录打印素数的个数.
                for (int i = 1; i <= 100; i++) {    //定义外层循环遍历1~100的整数
                        int num = 0;                    //定义变量num用于记录i%j==0的次数
                        for (int j = 1; j <= i; j++) {  //定义内层循环,使的i去模以1~i所有整数
                                if (i % j == 0) {           //如果i%j==0,则num++,来记录i被整除的次数
                                        num++;                                        //记录i被整除的次数
                                }
                        }
                        if (num == 2) {                 //如果i被整除的次数等于2,则说明i是素数
                                System.out.print(i+"\t");
                                count++;                                        //记录打印素数的个数
                                if (count % 5 == 0) {       //当打印素数的个数为5的倍数时则打印换行
                                        System.out.println();   //换行
                                }
                        }
                }
                System.out.println("在1~100之间有"+count+"个素数");
        }
}
---------------输出结果---------------
2       3       5       7       11
13      17      19      23      29
31      37      41      43      47
53      59      61      67      71
73      79      83      89      97
在1~100之间有25个素数


------------------方案二-------------------
class Test_9 {
        public static void main(String[] args) {
                int count = 0;
                for (int i = 1; i <= 100; i++) {
                        if (i == 1) {                        //排除1
                                continue;
                        }else if (i == 2 || i == 3) {        //如果i=1或者i=3时直接打印   
                                System.out.print(i+"\t");
                                count++;

                        }else if (i > 3 && i <= 9) {           
                                if (((i % 2)== 0)||((i % 3)== 0)) {   //当3<i<9时,如i%2=0或者i%3=0则终止本次循环,否则打印i
                                        continue;
                                }else{
                                        System.out.print(i+"\t");
                                        count++;
                                        if ((count % 5) == 0) {
                                                System.out.println();
                                        }
                                }
                        }else if (!((i % 2)==0)&&!((i % 3)==0)&&!((i % 5)==0)&&!((i % 7)==0)) {  //注:此条件表达式可以优化
                                System.out.print(i+"\t");
                                count++;
                                if ((count % 5) == 0) {
                                        System.out.println();
                                }
                        }
                }
                System.out.println("在1-100之间有"+count+"个素数");
        }
}
---------------输出结果---------------
2       3       5       7       11
13      17      19      23      29
31      37      41      43      47
53      59      61      67      71
73      79      83      89      97
在1~100之间有25个素数


3 个回复

正序浏览
用currentTimeMills 测试下就知道了
回复 使用道具 举报
你自己运行一下最好  把范围设的大点
回复 使用道具 举报
必须点赞 赞无限
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马