---
# System prepended metadata

title: 8/20 K速記

---

# 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)