# 8/20 K速記 * 質數搜尋範圍 ```java= public static boolean isPrime(int n) { if (n <= 1) { return false; } for (int i = 2; i <= Math.sqrt(n); i++) { //搜尋範圍 最簡為n開根號,若有小於開根號 會在之前先被搜尋出來 if (n % i == 0) { return false; } } return true; } ``` 質數n,拆解為a*b時,若a或b小於n開根號,則會在前面先被搜尋出來, 當前方位搜尋出來時,a及b相乘需小於n,故最大值為n開根號 即可,搜尋後續則無意義。 * 函數操作hint ```java= public static int getNum(String str, int min, int max) { Scanner sc = new Scanner(System.in); System.out.println(str); do { System.out.printf("請輸入%d ~ %d的數字 : ", min, max); int a = sc.nextInt(); if (a >= min && a <= max) { return a; } System.out.print("範圍錯誤,"); } while (true); } ``` 在第8行,可不須Break出去,可直接使用return即可。 並可將int a 直接在第6行宣告(do迴圈內)即可。 * 排序法 1. 氣泡排序法 * for 0~n迴圈 兩兩比較 大的右移,最大會放在n * 再找第二次 0~n-1 兩兩比較 大的右移,最大會放在n-1 ```java= public static void bubbleSort(int[] arr){ for (int k = 0; k < arr.length - 1; k++) {//泡泡排序法 for (int i = 0; i < arr.length - 1 - k; i++) { if (arr[i] > arr[i + 1]) { swap(arr, i, i + 1); } } } } public static void printArr(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } public static void swap(int[] arr, int i1, int i2) { int tmp = arr[i1]; arr[i1] = arr[i2]; arr[i2] = tmp; } ``` * 搜尋法 * 一般依序搜索,若有排序則會容易搜索, * 但資料增加速度較快,則每次都須重新排序,則不見得較佳,需視狀況而定。 一般數學的log 以10為底 log~10~(n) 程式的log 以2為底 log~2~(n)