- 1. 题目
- 2. 枚举法求解
- 2.1 分解质因数
- 2.2 枚举
- 2.3 整理分析
- 3. 公式求解
- 4. 扩展
- 4.1 因式分解
- 4.2 因数个数
1. 题目
12000的因数有多少个?
2. 枚举法求解
2.1 分解质因数
2 ∣ 12000 ‾ 2 ∣ 6000 ‾ 2 ∣ 3000 ‾ 2 ∣ 1500 ‾ 2 ∣ 750 ‾ 3 ∣ 375 ‾ 5 ∣ 125 ‾ 5 ∣ 25 ‾ 5 2\underline{|12000}\\ \enspace2\underline{|6000}\\ \enspace2\underline{|3000}\\ \enspace2\underline{|1500}\\ \enspace\enspace2\underline{|750}\\ \enspace\enspace3\underline{|375}\\ \enspace\enspace5\underline{|125}\\ \enspace\enspace\enspace5\underline{|25}\\ \enspace\enspace\enspace\enspace\enspace5\\ 2∣120002∣60002∣30002∣15002∣7503∣3755∣1255∣255
整理得:
12000 = 2 5 × 3 1 × 5 3 12000 = 2^5×3^1×5^3 12000=25×31×53
2.2 枚举
序号 | 质因数 |
---|---|
1 | 1 = 2 0 × 3 0 × 5 0 1=2^0×3^0×5^0 1=20×30×50 |
2 | 5 = 2 0 × 3 0 × 5 1 5=2^0×3^0×5^1 5=20×30×51 |
3 | 25 = 2 0 × 3 0 × 5 2 25=2^0×3^0×5^2 25=20×30×52 |
4 | 125 = 2 0 × 3 0 × 5 3 125=2^0×3^0×5^3 125=20×30×53 |
5 | 3 = 2 0 × 3 1 × 5 0 3=2^0×3^1×5^0 3=20×31×50 |
6 | 15 = 2 0 × 3 1 × 5 1 15=2^0×3^1×5^1 15=20×31×51 |
7 | 75 = 2 0 × 3 1 × 5 2 75=2^0×3^1×5^2 75=20×31×52 |
8 | 375 = 2 0 × 3 1 × 5 3 375=2^0×3^1×5^3 375=20×31×53 |
9 | 2 = 2 1 × 3 0 × 5 0 2=2^1×3^0×5^0 2=21×30×50 |
10 | 10 = 2 1 × 3 0 × 5 1 10=2^1×3^0×5^1 10=21×30×51 |
11 | 50 = 2 1 × 3 0 × 5 2 50=2^1×3^0×5^2 50=21×30×52 |
12 | 250 = 2 1 × 3 0 × 5 3 250=2^1×3^0×5^3 250=21×30×53 |
13 | 6 = 2 1 × 3 1 × 5 0 6=2^1×3^1×5^0 6=21×31×50 |
14 | 30 = 2 1 × 3 1 × 5 1 30=2^1×3^1×5^1 30=21×31×51 |
15 | 150 = 2 1 × 3 1 × 5 2 150=2^1×3^1×5^2 150=21×31×52 |
16 | 750 = 2 1 × 3 1 × 5 3 750=2^1×3^1×5^3 750=21×31×53 |
17 | 4 = 2 2 × 3 0 × 5 0 4=2^2×3^0×5^0 4=22×30×50 |
18 | 20 = 2 2 × 3 0 × 5 1 20=2^2×3^0×5^1 20=22×30×51 |
19 | 100 = 2 2 × 3 0 × 5 2 100=2^2×3^0×5^2 100=22×30×52 |
20 | 500 = 2 2 × 3 0 × 5 3 500=2^2×3^0×5^3 500=22×30×53 |
21 | 12 = 2 2 × 3 1 × 5 0 12=2^2×3^1×5^0 12=22×31×50 |
22 | 60 = 2 2 × 3 1 × 5 1 60=2^2×3^1×5^1 60=22×31×51 |
23 | 300 = 2 2 × 3 1 × 5 2 300=2^2×3^1×5^2 300=22×31×52 |
24 | 1500 = 2 2 × 3 1 × 5 3 1500=2^2×3^1×5^3 1500=22×31×53 |
25 | 8 = 2 3 × 3 0 × 5 0 8=2^3×3^0×5^0 8=23×30×50 |
26 | 40 = 2 3 × 3 0 × 5 1 40=2^3×3^0×5^1 40=23×30×51 |
27 | 200 = 2 3 × 3 0 × 5 2 200=2^3×3^0×5^2 200=23×30×52 |
28 | 1000 = 2 3 × 3 0 × 5 3 1000=2^3×3^0×5^3 1000=23×30×53 |
29 | 24 = 2 3 × 3 1 × 5 0 24=2^3×3^1×5^0 24=23×31×50 |
30 | 120 = 2 3 × 3 1 × 5 1 120=2^3×3^1×5^1 120=23×31×51 |
31 | 600 = 2 3 × 3 1 × 5 2 600=2^3×3^1×5^2 600=23×31×52 |
32 | 3000 = 2 3 × 3 1 × 5 3 3000=2^3×3^1×5^3 3000=23×31×53 |
33 | 16 = 2 4 × 3 0 × 5 0 16=2^4×3^0×5^0 16=24×30×50 |
34 | 80 = 2 4 × 3 0 × 5 1 80=2^4×3^0×5^1 80=24×30×51 |
35 | 400 = 2 4 × 3 0 × 5 2 400=2^4×3^0×5^2 400=24×30×52 |
36 | 2000 = 2 4 × 3 0 × 5 3 2000=2^4×3^0×5^3 2000=24×30×53 |
37 | 48 = 2 4 × 3 1 × 5 0 48=2^4×3^1×5^0 48=24×31×50 |
38 | 240 = 2 4 × 3 1 × 5 1 240=2^4×3^1×5^1 240=24×31×51 |
39 | 1200 = 2 4 × 3 1 × 5 2 1200=2^4×3^1×5^2 1200=24×31×52 |
40 | 6000 = 2 4 × 3 1 × 5 3 6000=2^4×3^1×5^3 6000=24×31×53 |
41 | 32 = 2 5 × 3 0 × 5 0 32=2^5×3^0×5^0 32=25×30×50 |
42 | 160 = 2 5 × 3 0 × 5 1 160=2^5×3^0×5^1 160=25×30×51 |
43 | 800 = 2 5 × 3 0 × 5 2 800=2^5×3^0×5^2 800=25×30×52 |
44 | 4000 = 2 5 × 3 0 × 5 3 4000=2^5×3^0×5^3 4000=25×30×53 |
45 | 96 = 2 5 × 3 1 × 5 0 96=2^5×3^1×5^0 96=25×31×50 |
46 | 480 = 2 5 × 3 1 × 5 1 480=2^5×3^1×5^1 480=25×31×51 |
47 | 2400 = 2 5 × 3 1 × 5 2 2400=2^5×3^1×5^2 2400=25×31×52 |
48 | 12000 = 2 5 × 3 1 × 5 3 12000=2^5×3^1×5^3 12000=25×31×53 |
2.3 整理分析
与 2 2 2相关的数有 2 0 2^0 20、 2 1 2^1 21、 2 2 2^2 22、 2 3 2^3 23
、 2 4 2^4 24、 2 5 2^5 25 共6个数
与 3 3 3相关的数有 3 0 3^0 30、 3 1 3^1 31 共2个数
与 5 5 5相关的数有 5 0 5^0 50、 5 1 5^1 51 、 5 2 5^2 52 、 5 3 5^3 53 共4个数。
将他们分类组合有6×2×4种可能,所以我们得出以下公式:
C = ∏ i = 1 n ( P n + 1 ) C=\displaystyle\prod_{i=1}^n(Pn+1) C=i=1∏n(Pn+1)
其中:
C C C 为所有因数个数;
P n P_n Pn 为分解质因数后质因数的指数;
n n n 为不同质因数的个数;
∏ \prod ∏ 为连乘或连积符号。
3. 公式求解
因数公式
C = ∏ i = 1 n ( P n + 1 ) C=\displaystyle\prod_{i=1}^n(Pn+1) C=i=1∏n(Pn+1)
分解因数:
12000 = 2 5 × 3 1 × 5 3 12000 = 2^5×3^1×5^3 12000=25×31×53
有3个不同的质因数,所以: n = 3 n=3 n=3
3个不同的质因数的指数分别是:
{ P 1 = 5 第 1 个质因数 2 的指数 P 2 = 1 第 2 个质因数 3 的指数 P 3 = 3 第 3 个质因数 5 的指数 \begin{cases} P_1=5 &\text{ } 第1个质因数2的指数 \\ P_2=1 &\text{ } 第2个质因数3的指数\\ P_3=3 &\text{ } 第3个质因数5的指数 \end{cases} ⎩ ⎨ ⎧P1=5P2=1P3=3 第1个质因数2的指数 第2个质因数3的指数 第3个质因数5的指数
∴ C = ∏ i = 1 n ( P n + 1 ) = ( P 1 + 1 ) × ( P 2 + 1 ) × ( P 3 + 1 ) = ( 5 + 1 ) × ( 1 + 1 ) × ( 3 + 1 ) = 6 × 2 × 4 = 48 \begin{equation} \begin{split} \therefore C&=\displaystyle\prod_{i=1}^n(Pn+1)\\ &=(P_1+1)\times(P_2+1)\times(P_3+1)\\ &=(5+1)\times(1+1)\times(3+1)\\ &=6\times 2\times 4\\ &=48 \end{split} \end{equation} ∴C=i=1∏n(Pn+1)=(P1+1)×(P2+1)×(P3+1)=(5+1)×(1+1)×(3+1)=6×2×4=48
4. 扩展
4.1 因式分解
分解质因数
/// <summary>
/// 分解质因数函数
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
static string DecomposingPrimeFactors(int number)
{int N = number;List<int> temps = new List<int>();int primeNumber = 2;DecomposingPrimeFactors(ref N, ref primeNumber, ref temps);return FormatPowerlaw(number,temps);
}
/// <summary>
/// 递归查找质因数
/// </summary>
/// <param name="N">传入需要分解的数</param>
/// <param name="primeNumber">传入第一个质数1</param>
/// <param name="temp">存储找到的质因数</param>
static void DecomposingPrimeFactors(ref int N, ref int primeNumber, ref List<int> temp)
{if (N <= 1){return;}if (N % primeNumber == 0){temp.Add(primeNumber);N = N / primeNumber;DecomposingPrimeFactors(ref N, ref primeNumber, ref temp);}else{primeNumber++;DecomposingPrimeFactors(ref N, ref primeNumber, ref temp);}
}
格式化输出结果
/// <summary>
/// 格式化质因数-乘式
/// N=a×a×a×a...×b×b×b×b×b...×c×c×c×c×c.....
/// </summary>
/// <param name="number"></param>
/// <param name="primeFactors"></param>
/// <returns></returns>
static string FormatMultiplicativeFormula(int number, List<int> primeFactors)
{return number + " = " + string.Join("×", primeFactors);
}
/// <summary>
/// 格式化质因数-指数式
/// N=a^x1×b^x2×c^x3×.....
/// </summary>
/// <param name="number"></param>
/// <param name="primeFactors"></param>
/// <returns></returns>
static string FormatPowerlaw(int number, List<int> primeFactors)
{List<string> temps2 = new List<string>();foreach (var item in primeFactors.GroupBy(o => o)){int a = item.Key;int n = item.Count();temps2.Add($"{a}^{n}");}return number + " = " + string.Join("×", temps2);
}
Console.WriteLine($"{DecomposingPrimeFactors(12000)}");
12000 = 2^5×3^1×5^3
4.2 因数个数
枚举法
/// <summary>
/// 枚举法计算因数个数
/// </summary>
/// <param name="N"></param>
/// <returns></returns>
static double CalculateFactorCount(double N)
{int cnt=0;for(double i=1; i<=N;i+=1){var v = Math.Pow(5, i);if(N % i == 0){cnt++;}}return cnt;
}
公式法
/// <summary>
/// 使用因数公式计算个数
/// </summary>
/// <param name="N"></param>
/// <returns></returns>
static double CalculateFactorCount2(int number)
{int cnt = 1;int N = number;List<int> primeFactors = new List<int>();int primeNumber = 2;DecomposingPrimeFactors(ref N, ref primeNumber, ref primeFactors);foreach (var item in primeFactors.GroupBy(o => o)){int n = item.Count();cnt *=(n+1);}return cnt;
}
/// <summary>
/// 递归查找质因数
/// </summary>
/// <param name="N">传入需要分解的数</param>
/// <param name="primeNumber">传入第一个质数1</param>
/// <param name="temp">存储找到的质因数</param>
static void DecomposingPrimeFactors(ref int N, ref int primeNumber, ref List<int> temp)
{if (N <= 1){return;}if (N % primeNumber == 0){temp.Add(primeNumber);N = N / primeNumber;DecomposingPrimeFactors(ref N, ref primeNumber, ref temp);}else{primeNumber++;DecomposingPrimeFactors(ref N, ref primeNumber, ref temp);}
}
调用
Console.WriteLine($"{DecomposingPrimeFactors(12000)}");var Count = CalculateFactorCount(12000);Console.WriteLine($"枚举法:12000的因数有{Count}个");var Count2 = CalculateFactorCount2(12000);Console.WriteLine($"公式法:12000的因数有{Count2}个");Console.ReadLine();