代码:(亲写有效)标注、解释,非常清晰,适合小白,另有缩减运行时间的优化版
1、普通版,输出形式:质数从大到小输出
class dada{
public static void main(String[] args) {
int count = 0;
boolean isFlag = true;
for(int i = 100;i >=2;i--){ //遍历100内的数到最小质数2
for(int j = 2;j <= i-1;j++){ //j被i 除
//if(j % i != 0){ 错误,个位数并不起作用
if(i % j == 0){ //i被j除尽的不是质数,逆向求解
isFlag = false; //只要进入循环且满足被除尽的数,会将原本true状态赋值为false
}
}
//if输出判断不进for循环内,与for同层次对整个for循环输出结果遍历
if(isFlag == true){ //此时100以内数没有进入循环则还为true状态,即i被j整除不尽的数
System.out.print( i + "、");
count++;
}
//重置isFlage
isFlag = true; //重置isFlag,下一次外循环进入内循环时重新以true初始状态进入判断是否赋值为false
//或者将boolean isFlag = true;放到外循环下、内循环外即可省略此步
}
System.out.print( '\n' + "输出质数个数为" + count);
}
}
2、优化版,输出形式:质数从小到大输出(取质数范围较大时,运行时间缩减明显)
class dada{
public static void main(String[] args) {
boolean isFlag1 = true;
int count1 = 0;
for(int i = 2;i <= 100;i++){
for(int j = 2;j <= Math.sqrt(i);j++){ //优化二,开方,对本身是质数的有效,运行时间大幅度减少
if(i % j == 0){
isFlag1 = false;
break;//优化一,只对本身非质数的自然数是有效的
}
}
if(isFlag1 == true){
System.out.print( i + "、");
count1++;
}
isFlag1 = true;
}
System.out.print( '\n' + "输出质数个数为" + count1);
}
}