【问题标题】:Program for finding factorions in a given range在给定范围内寻找因式的程序
【发布时间】:2021-05-05 07:51:30
【问题描述】:

我最近遇到了一个叫做“因子”的数学对象,它是一个等于其各个数字的阶乘之和的数字。例如,145 是一个因式,因为 1! + 4! + 5! = 1 + 24 + 120 = 145。

所以我决定编写一些基本的 Python 代码,以便在给定范围内系统地查找数字。以下是我想出的代码:

#factorion finding
from numpy import *
from math import *

def factorion(a, b):
    factorions = []
    for i in range(a, b):
        atom = []
        while i != 0:
            atom.append(i % 10)
            i = i // 10

        sum = 0
        j = 0
        while j < len(atom):
            sum += factorial(atom[j])
            j += 1

        if sum == i:
            factorions.append(i)

    return factorions

factorion(1,1000)

Python 没有为此给我任何错误,但输出只是空列表 [],当我知道至少应该有 145 以及 1 和 2 时。

这里有什么问题?

【问题讨论】:

  • 为了使您的代码清晰(呃)不要使用* 导入。我认为您在这里没有使用任何 numpy 函数。如果factoral 来自math,你应该说清楚。在任何情况下,您都需要单步执行您的代码,确保每个表达式都产生预期的结果。这就是我必须做的来帮助你。
  • 你确定有这样的对象吗?据我所知,找到一个一般数字的因子是 NP-hard 问题,我怀疑在 NumPymath 模块中是否存在某些对象。当然,我可能是错的,所以请提供这个模块的文档。此外,在您的代码中,您使用factorial 而不是factorion,这只是x!
  • 您尝试在循环内更新范围变量 i 不起作用

标签: python numpy loops factorial


【解决方案1】:

您正在更改循环内的“i”循环索引。

必须有一种更 Pythonic 的方式将数字转换为数字列表而不改变数字本身,例如:

digits = [int(s) for s in str(number)]

【讨论】:

  • 是的,也许整个循环体可以这样缩短:if sum(math.factorial(int(d)) for d in str(i)) == i: factorions.append(i)
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 2023-03-09
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多