Java之尋找1-10000以內的質數,速度大比拼
阿新 • • 發佈:2019-01-11
方法一:兩次的for迴圈中,i%j跟j的每個數值進行了比較,速度很慢
package com.huaxin; public class TestPrimeNum { public static void main(String[] args){ //方法一 boolean flag01 = false; long start01 =System.currentTimeMillis(); for(int i = 2; i < 100000; i++){ for(int j = 2; j < i; j++){ if(i % j == 0){ flag01 = true; } } if(flag01 == false){ System.out.println(i); } flag01 = false; } } }
方法二:利用了break跳出迴圈,只要找到i%j == 0的值迴圈就會跳出,速度較快
package com.huaxin; public class TestPrimeNum { public static void main(String[] args){ boolean flag02 = false; long start02 =System.currentTimeMillis(); for(int i = 2; i < 100000; i++){ for(int j = 2; j < i; j++){ if(i % j == 0){ flag02 = true; break; } } if(flag02 == false){ System.out.println(i); } flag02 = false; } long end02 = System.currentTimeMillis(); System.out.println("經歷的時間為:" + (end02 - start02)); } }
方法三:只需要找到j開平方的值就可以判定是不是素數,說到這裡大家可能有點不太理解,例如:17這個數字,17開平方的值為4點多,當i的值無法被17整除的時候,他的平方根的值也一定不能被整除。大家仔細考慮一下。
package com.huaxin; public class TestPrimeNum { public static void main(String[] args){ //方法三 boolean flag03 = false; long start03 = System.currentTimeMillis(); for(int i = 2; i < 100000; i++){ for(int j = 2; j <= Math.sqrt(i); j++){ if(i % j == 0){ flag03 = true; break; } } if(flag03 == false){ System.out.println(i); } } long end03 = System.currentTimeMillis(); System.out.println("經歷的時間為:" + (end03 - start03)); } }