開啟章節選單
調和級數
普通簡介
調和級數 (Harmonic Series) 是一個數學級數,其通項為 ,也就是:
不過這邊要介紹的是他在時間複雜度中的應用,最長出現在因倍數相關的題目中。
例題
請你求 裡面所有數,它有幾個正因數,如 有 ,所以答案是 。
首先,我們可以對於每個數,然後在它之中的數枚舉,如果整除就將答案加一。
int n; int fac[n+1]; cin >> n; // 輸入 n for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { if ((i % j) == 0) { // 整除 fac[i]++; } } } for (int i = 1; i <= n; i++) { cout << fac[i] << ' '; }
那這個時間複雜度是 。
接著是另一個方法,我們枚舉所有數,然後對於 以內,是它的倍數的都將答案加一。
int n; int fac[n+1]; cin >> n; // 輸入 n for (int i = 1; i <= n; i++) { // 枚舉因數 for (int j = i; j <= n; j+= i) { fac[j] ++; // 枚舉倍數 } } for (int i = 1; i <= n; i++) { cout << fac[i] << ' '; }
那這個時間複雜度看似是 ,但仔細觀察,會是 ,根據調和級數的性質,這個和其實是 的!