質數定義:能且僅能被1和它自己整除的整數,稱爲質數,最小的質數是2。java
思路:若是X在(2,X-1] 這個區間內沒有約數,則證實X是質數。優化
實現方法一:code
/** * @author 蝸牛君 * @create 2019-09-12 16:52 */ /*輸出100000以內的質數 * 質數的定義:能且只被1和它自己整除的數稱爲質數 * */ public class primeNumberTest { public static void main(String[] args) { //定義一個變量記錄質數的個數 int primeNumberCount = 0; //獲取當前時間 long start = System.currentTimeMillis(); //計算0到100000之間質數的個數 int num = 100000; for (int i = 2; i <= num; i++) { //定義一個bool型變量,用來判斷是否是質數 boolean isFlag = true; for (int j = 2; j < i; j++) { if (i % j == 0) { //若是在(2,i-1]這個區間內有約數,說明不是質數 isFlag = false; } } if (isFlag == true) { //System.out.println(i + "是質數"); primeNumberCount++; } } long end = System.currentTimeMillis(); System.out.println("本次運算用時:" + (end - start ) + "毫秒"); System.out.println("0到"+ num + "之間共有"+ primeNumberCount +"個質數!"); } }
實現方法二:class
是對方法一的優化,一旦判斷X爲質數,就經過countinue來跳出本次循環,節省算力,縮減計算時間變量
注:對循環體添加標籤,能夠方便break、continue直接跳轉到指定的循環體循環
public class primeNumberTest { public static void main(String[] args) { int primeNumberCount = 0; //獲取當前時間 long start = System.currentTimeMillis(); int num = 100000; lable:for ( int i = 2 ; i <= num ; i++ ){ int count = 0; for (int j = 2; j < i;j ++){ if (i % j == 0) { //當在這個區間有公約數時,可判斷不是質數,直接退出循環,再也不進行後面的判斷,可縮減部分運算時間 continue lable ; } } primeNumberCount++; } long end = System.currentTimeMillis(); System.out.println("本次運算用時:" + (end - start ) + "毫秒"); System.out.println("0到"+ num + "之間共有"+ primeNumberCount +"個質數!"); } }
實現方法三:方法
再次優化,重點在二層循環時,減小了對 j 的判斷的範圍。im
說明:若是 C = A x A,則只須要肯定 C 在 ( 2 , A ] 的區間內沒有約數,就能夠證實 C 是質數。static
public class primeNumberTest { public static void main(String[] args) { int primeNumberCount = 0; //獲取當前時間 long start = System.currentTimeMillis(); int num = 100000; lable:for ( int i = 2 ; i <= num ; i++ ){ int count = 0; for (int j = 2; j < i;j ++){ if (i % j == 0) { //當在這個區間有公約數時,可判斷不是質數,直接退出循環,再也不進行後面的判斷,可縮減部分運算時間 continue lable ; } } primeNumberCount++; } long end = System.currentTimeMillis(); System.out.println("本次運算用時:" + (end - start ) + "毫秒"); System.out.println("0到"+ num + "之間共有"+ primeNumberCount +"個質數!"); } }