疑问:下题有两个解决方案,方案一虽然代码简洁但执行效率会比方案二的高吗?
题目:分析以下需求,并用代码实现:(有难度,可选做!)
(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个素数
|
|