gpt4 book ai didi

Python 没有像我预期的那样增加循环

转载 作者:行者123 更新时间:2023-12-01 09:13:31 25 4
gpt4 key购买 nike

我有一些代码,它将一个整数作为输入并打印出该整数质因数的排序列表。

它几乎适用于所有数字,例如,当输入为 100 时,它将打印 [2, 2, 5, 5],对于 1235632,它将输出 [2, 2, 3, 3, 343237]。

但是,对于更大的数字,它不会按顺序打印出因子,我不确定这是否是我忽略的代码中 Unresolved 问题,或者是否是其他问题。

例如,当我输入 1234567891011121314151617 时,它将输出 [3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 43, 109, 104281, 1394027],这显然没有排序,我一生都无法弄清楚为什么。

我正在使用我认为是最新版本的 pycharm。

无论如何,这是代码:

from math import floor
from math import sqrt

n = int(input("Enter a number to be split into its prime factors"))
FList = []
k = 1

while n != 1:
k = k + 1
s = floor(sqrt(n))

if k > s:
FList.append(int(n))
break

if n % k == 0:
n = n/k
FList.append(k)
k = 1

print(FList)

编辑:只是为了澄清,我宁愿修复程序,然后使用排序算法来帮助清理。

正如其他人所指出的,大数字的因子完全是垃圾,所以我想当前的问题是为什么它打印这些数字。

最佳答案

问题是您使用 / 进行除法,其结果是 float :

6/2
# 3.0

当您尝试对大数进行因式分解时,除以第一个因式 (3) 后得到的结果是:

1234567891011121314151617 / 3
# 4.115226303370404e+23

它是四舍五入的,因为 float 的精度有限。这就是为什么您现在可以多次将其除以 2。

您应该使用整数除法//,这将为您提供无限精度的精确商:

1234567891011121314151617 // 3
# 411522630337040438050539

所以,只需将代码更改为:

from math import floor
from math import sqrt

n = int(input("Enter a number to be split into its prime factors"))
FList = []
k = 1

while n != 1:
k = k + 1
s = floor(sqrt(n))

if k > s:
print('appending', n)
FList.append(int(n))
break

if n % k == 0:
n = n//k # Use integer division here
FList.append(k)
k -= 1 # Try k again on next loop, no need to test smaller values again.

print(FList)

对于您尝试的数字,有一些很大的因素,因此可能需要很长时间...(实际上,它是 3*2*47*4993*584538396786764503...)

关于Python 没有像我预期的那样增加循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51448483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com