題目
質數:只能被1和它本身所整除的數。即:從2開始一直到這個數-1,都不能被這個數整除;最小的質數是2
知識點
1.System.currentTimeMillis():計算當前時間距離1970-1-1的毫秒數,返回long
2.Math.sqrt:開方,返回double
代碼1
package lesson.l5_loop;//打印100以內所有質數
//質數:只能被1和它本身所整除的數。即:從2開始一直到這個數-1,都不能被這個數整除
//最小的質數是2
public class PrimeNumber1 {public static void main(String[] args) {for (int i = 2; i <= 100; i++) {boolean isPrime = true;for (int j = 2; j <= i - 1; j++) {if (i % j == 0 ) {isPrime = false;}}if (isPrime) {System.out.print(i + "\t");}}}
}
代碼2
減少內層循環次數:i/2+1
package lesson.l5_loop;public class PrimeNumber2 {public static void main(String[] args) {for (int i = 2; i <=100 ; i++) {boolean isPrime=true;for (int j=2;j<=i/2+1;j++){if (i%j==0){isPrime=false;}}if (isPrime){System.out.print(i+"\t");}}}
}
代碼3
使用break優化:當不是質數時,立即跳出當前循環
package lesson.l5_loop;public class PrimeNumber3 {public static void main(String[] args) {long start=System.currentTimeMillis();for (int i =2 ; i <=100 ; i++) {boolean isPrime=true;for (int j=2;j<=i/2+1;j++){if (i%j==0){isPrime=false;break;}}if (isPrime&&i!=1){System.out.print(i+"\t");}}long end=System.currentTimeMillis();System.out.println("\n"+(end-start));//52}}
代碼4
使用開方i
Math.sqrt:開方
因為除以a==b,所以沒必要去除以b
package lesson.l5_loop;public class PrimeNumber3 {public static void main(String[] args) {long start=System.currentTimeMillis();for (int i =2 ; i <=100 ; i++) {boolean isPrime=true;for (int j=2;j<=(int)Math.sqrt(i);j++){if (i%j==0){isPrime=false;break;}}if (isPrime){System.out.print(i+"\t");}}long end=System.currentTimeMillis();System.out.println("\n"+(end-start));//52 48}}
代碼5
使用帶標簽的continue
package lesson.l5_loop;public class PrimeNumber4 {public static void main(String[] args) {long start = System.currentTimeMillis();label:for (int i = 2; i <= 100; i++) {for (int j = 2; j <= (int) Math.sqrt(i); j++) {if (i % j == 0) {continue label;}}System.out.print(i + "\t");}long end = System.currentTimeMillis();System.out.println("\n" + (end - start));}
}