python - 为什么在处理数字时该功能无法正常工作?
问题描述
所以我试图得到一个给定的数字。问题是,代码会打印错误消息,而且它也不适用于所有数字。这是为什么?
这是获取因子的部分:
thefactors = []
d = 2
while d*d <= number:
while (number % d) == 0:
factors.append(d)
number //= d
d += 1
break
if number > 1:
factors.append(number)
print('The factors of {} are:'.format(number), thefactors)
发生了什么事,我该如何解决?
解决方案
我看到的问题是,您既要检查 的平方d
是否小于n
(d*d <= n
或d**2 <= n
),又要n
在发现因子时重新分配(n //= d
)。这不包括不必要的break
陈述。
这是我所做的:
>>> def factorization(n):
factors = []
d = 2
while d <= n:
if n % d == 0:
factors.append(d)
n //= d
d = 2
else:
d += 1
return factors
>>> factorization(104)
[2, 2, 2, 13]
>>> factorization(9)
[3, 3]
>>>
此方法隐式检查d**2
小于或等于n
,因为要满足while
条件,n // d
必须小于或等于d
,因此d**2
必须小于或等于n
。
要打印素数分解:
>>> num = 104
>>> factors = factorization(num)
>>> print(f"The prime factors of {num} are {factors}")
The prime factors of 104 are [2, 2, 2, 13]
>>> print(f"The prime factors of {num} are {', '.join(factors)}")
The prime factors of 104 are 2, 2, 2, 13
推荐阅读
- javascript - React 的状态更新与 ref 异步更新
- long-integer - 数据的长到宽格式转换会出错
- java - 我将我的 android studio 更新到了最新版本,但它现在无法启动,并且出现内部错误
- shell - 在 GitHub 操作中使用 Shell 脚本中的环境变量
- javascript - 在最近的浏览器上,JSZip 的文件大小限制是多少
- python - 按指定键的值对字典列表进行重复数据删除
- android - Android 功能模块确认对话测试
- html - 如何使子菜单下拉列表在父下拉列表之外可见
- plsql - IG 中的 Oracle Apex DML 处理查询
- python - 导入warc时出现错误“没有名为'__builtin__'的模块”