primes - 阶乘的素因数分解

标签 primes factorial prime-factoring

我需要编写一个程序来输入一个数字并以以下形式输出其阶乘的质因数分解:

4!=(2^3)*(3^1)

5!=(2^3)*(3^1)*(5^1)

问题是我仍然不知道如何得到那个结果。

显然,括号中的每个第一个数字都是递增的素数,直到实际的阶乘。括号中的第二个数字是该数字在阶乘中出现的次数。

我想不通的是例如 5!=(2^3)*(3^1)*(5^1) ,怎么2只出现3次,3只出现1次,5只出现120次(5!=120)。

我现在已经解决了这个问题,感谢那些发表评论的乐于助人的人,但我现在无法弄清楚如何在不实际计算阶乘的情况下获取一个数字并以这种格式获得阶乘。

最佳答案

每个数字都可以由质数的唯一(最多重新排序)乘法表示,称为数字的质因数分解,因为您正在寻找可以唯一创建该数字的质因数。
2^3=83^1=35^1=5
8*3*5=120
但这也意味着:(2^3)*(3^1)*(5^1) = 120
这并不是说 2 作为数字 120 中的数字出现 3 次,这显然不是,而是将 2 乘以 2 乘以 2,总共 3 个二。同样,对于 3 和 5,它们在 120 的质因数分解中出现一次。您提到的表达式向您展示了数字 120 的这种独特的质数因数分解。这是在 Python 中获得数字的质数因数分解的一种方法:

def pf(number):
    factors=[]
    d=2
    while(number>1):
        while(number%d==0):
            factors.append(d)
            number=number/d
        d+=1
    return factors

运行它你得到:
>>> pf(120)
[2, 2, 2, 3, 5]

如上所述,它们相乘得到 120。这是一个小图,可以更清楚地说明这一点:

enter image description here

关于primes - 阶乘的素因数分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196814/

相关文章:

function - 实现递归函数(阶乘)时出现堆栈溢出错误

Haskell 列表递归 - 为什么一个有效而另一个无效?

c - 使用指针、标志和函数调用的素数生成器 (C)

language-agnostic - 可以在计算之前知道阶乘有多大吗?

java - 使用 Java 查找 Long 数的质因数

python - 在 Python 中分解一个数字

java - 如何递归地求解程序

primes - 如何在 Sage 中获得给定长度的素数?

python - 为什么在这段代码中查找素数,is_prime(9) 返回 True?

java - 5!是 120,但输出为 1!是120?