请注意,此问题包含一些剧透。
“除数(包括1和数字本身)可以从素数(和幂)除数中取一个元素来计算。”
它执行此操作的(python)代码是num_factors = lambda x: mul((exp+1) for (base, exp) in factorize(x))
(其中mul()
是reduce(operator.mul, ...)
。)
它没有说明factorize
是如何定义的,而且我无法理解它是如何工作的。它如何告诉你这个数字的因素数量?
答案 0 :(得分:12)
基本思想是,如果您将一个数字分解为以下形式,实际上是标准形式:
let p be a prime and e be the exponent of the prime:
N = p1^e1 * p2^e2 *....* pk^ek
现在,要知道N有多少除数,我们必须考虑每个素数因子的组合。所以你可以说除数的数量是:
e1 * e2 * e3 *...* ek
但是你必须注意到,如果一个素因子的标准形式的指数为零,那么结果也将是一个除数。这意味着,我们必须为每个指数添加一个,以确保我们将第i个p包含在零的幂中。以下是使用数字12的示例 - 与问题编号相同:D
Let N = 12
Then, the prime factors are:
2^2 * 3^1
The divisors are the multiplicative combinations of these factors. Then, we have:
2^0 * 3^0 = 1
2^1 * 3^0 = 2
2^2 * 3^0 = 4
2^0 * 3^1 = 3
2^1 * 3^1 = 6
2^2 * 3^1 = 12
我希望你现在看到为什么我们在计算除数时给指数加一个。
答案 1 :(得分:2)
我不是Python专家,但是为了计算除数的数量,你需要对数字进行素数分解。
公式很简单:在每个素数除数的指数中加一,并乘以它们。
示例:
12 = 2 ^ 2 * 3 ^ 1 - >指数是2和1,加1是3和2,3 * 2 = 6除数(1,2,3,4,6,12)
30 = 2 ^ 1 * 3 ^ 1 * 5 ^ 1 - >指数是1,1和1,加上一个是2,2和2,2 * 2 * 2 = 8个除数(1,2,3,5,6,10,15,30)
40 = 2 ^ 3 * 5 ^ 1 - >指数是3和1,加上一个是4和2,4 * 2 = 8个除数(1,2,4,5,8,10,20,40)