了解分解函数

Dae*_*yth 4 python math

请注意,此问题包含一些剧透.

一个对问题排名第12的解决方案规定,

"除数(包括1和数字本身)可以从素数(和幂)除数中取一个元素来计算."

它执行此操作的(python)代码是num_factors = lambda x: mul((exp+1) for (base, exp) in factorize(x))(其中mul())reduce(operator.mul, ...).

它没有说明如何factorize定义,我无法理解它是如何工作的.它如何告诉你这个数字的因素数量?

Ara*_*raK 12

基本的想法是,如果你有一个数字分解成下面的形式,它实际上是标准形式:

let p be a prime and e be the exponent of the prime:

N = p1^e1 * p2^e2 *....* pk^ek
Run Code Online (Sandbox Code Playgroud)

现在,要知道N有多少除数,我们必须考虑每个素数因子的组合.所以你可以说除数的数量是:

e1 * e2 * e3 *...* ek
Run Code Online (Sandbox Code Playgroud)

但是你必须注意到,如果一个主要因子的标准形式的指数为零,那么结果也将是一个除数.这意味着,我们必须为每个指数添加一个,以确保我们将第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
Run Code Online (Sandbox Code Playgroud)

我希望你现在看到为什么我们在计算除数时将一个加到指数中.

  • @Landei请再次阅读答案,我解释为什么我们需要实际添加一个."这意味着,我们必须为每个指数添加一个,以确保我们将第i个p包含在零的幂中" (3认同)