約數個數與約數和專題
阿新 • • 發佈:2021-09-01
一、約數個數公式
如果\(n\)的唯一分解式: \(n={p_1}^{r_1} {p_2}^{r_2} ... {p_k}^{r_k}\)
一、\(n\)的約數個數公式:
證明:以\(p_1\)為例,這個質數因子,可以選擇\(0\)個,可以選擇\(1\)個,...,最多可以選擇\(r_1\)個,就是有\(r_1+1\)種選擇的可能性,其它\(p_2,p_3,...,p_k\)都是如此,根據乘法原理,所有的可能性就是\((r_1+1) * (r_2+1) * ... * (r_k+1)\)。
舉個栗子:
\(180= 2^2 * 3^2 * 5\)
約數個數\(=(1+2) * (1+2) * (1+1) =18\)
二、求單個數字的約數個數
#include <bits/stdc++.h> using namespace std; typedef long long LL; /** * 功能:計算約數個數 * @param n * @return */ LL getDivisorCount(LL x) { unordered_map<int, int> primes; //key:質數 value:個數 //求質數因子 for (int i = 2; i <= x / i; i++) while (x % i == 0) x /= i, primes[i]++; //primes[i]表示質數i因子的個數+1 //如果還有大因子,那就加上 if (x > 1) primes[x]++; //公式大法 LL res = 1; for (auto p : primes) res = res * (p.second + 1);//公式大法 return res; }