1. 程式人生 > 其它 >【Docker】Docker映象、容器、倉庫命令詳解

【Docker】Docker映象、容器、倉庫命令詳解

質因數分解

首先引入定理:
對於任何一個大於1的正正整數都可以分解為有限個質數的的乘積,可記作:

\(N = p_{1}^{C1} p_{2}^{C2}...p_{m}^{Cm}\)

其中Ci都是正整數,pi都是質數,且滿足

\(p_1 < p_2 < ... < p_m\)

一般在做題時,採用試除法和埃氏篩基本就足夠了。大致可描述為,掃描區間\([2, \sqrt{N}]\)的每個數d,如果d可以整處N(N % d == 0),那麼說明d是一個質數,並且去掉N中的d一次。

需要注意的是,一個合數的的因子在掃描到這個合數之前就從N中被去掉了,所以在上述過程中能整除N的一定是質數。

特別地,如果N沒有被任何\([2, \sqrt{N}]\)所整除,說明N本身就是一個質數,無需進行分解。

int p[MAX], C[MAX];
void divide(int N)
{
    int m = 0;
    //在[1, sqrt(N)]區間內試除;
    for (int i = 2; i  * i <= N; i++) {
        if (N % i == 0) {
            p[++m] = i, c[m] = 0;
            while (N % i == 0) {
                N = N / i;
                c[m]++;
            }
        }
    }

//N本身就是質數;
     if (N > 1) {
         p[++m] = N, c[m] = 1;
     }
}

例題:[lc650]

  1. 只有兩個鍵的鍵盤

最初記事本上只有一個字元 'A' 。你每次可以對這個記事本進行兩種操作:

Copy All(複製全部):複製這個記事本中的所有字元(不允許僅複製部分字元)。
Paste(貼上):貼上 上一次 複製的字元。

給你一個數字 n ,你需要使用最少的操作次數,在記事本上輸出 恰好 n 個 'A' 。返回能夠打印出 n 個 'A' 的最少操作次數。
示例 1:

輸入:3
輸出:3
解釋:
最初, 只有一個字元 'A'。
第 1 步, 使用 Copy All 操作。
第 2 步, 使用 Paste 操作來獲得 'AA'。
第 3 步, 使用 Paste 操作來獲得 'AAA'。

示例 2:

輸入:n = 1
輸出:0

提示:

1 <= n <= 1000
//解析:本質上就是分解質因數,然後對質因數進行累加;
//如此,可以對照模板來寫;
   int minSteps(int n) {
        int ans = 0;
        for (int i = 2; i * i <= n; i++) {
            while (n % i == 0) {
                ans += i;
                n /= i; 
            }
        }

        if (n > 1) ans += n;

        return ans;
    }

參考

1.演算法競賽進階指南