【发布时间】:2018-07-26 07:49:33
【问题描述】:
哇塞,
遇到以下问题,我无法解决。 处理长度在 5 - 52 左右的数字,我不想得到它们的素数。 使用Python,我发现了以下两种算法:
我。
def faktorisiere(n):
l = [] # Lösungsmenge
# Auf Teilbarkeit durch 2, und alle ungeraden Zahlen von 3..n/2 testen
for i in chain([2], range(3, n//2 + 1, 2)):
# Ein Teiler kann mehrfach vorkommen (z.B. 4 = 2 * 2), deswegen:
while n % i == 0:
l.append(i)
print(i)
n = n // i # "//" ist ganzzahlige Division und entspricht int(n/i)
if i > n: # Alle Teiler gefunden? Dann Abbruch.
break
print(l)
二。
x = input("Number: ")
mode = x[-1:]
x = int(x[:-1])
if int(x) < 1000000000000:
faktorisiere(x)
else:
if mode == 'f':
faktorisiere(x)
rx = int(sqrt(x)) + 1
for i in range(1, rx+1):
if mode == 'a':
if x % i == 0:
y = int(x/i)
print(str(x), "=", i, "*", str(y))
if mode == 'u':
if i % 2 != 0:
if x % i == 0:
y = int(x/i)
print(str(x), "=", i, "*", str(y))
但是第一个代码计算数字非常慢,如下所示: 1917141215419419171412154194191714
第二个工作得快一点,但我得到错误的输出,我在代码中找不到错误。 作为示例,我们采用给定的数字。 这些是pythons输出的第一行:
1917141215419419171412154194191714 = 1 * 1917141215419419143900621852114944
1917141215419419171412154194191714 = 2 * 958570607709709571950310926057472
- 1917141215419419171412154194191714 = 3 * 639047071806473023947675938062336
但正如您所见,这些乘法并不等于结果。 代码中是否有任何错误? 或者仅仅是因为数字的长度? 希望你能帮助我。
最好的祝愿, 时间人
【问题讨论】:
-
因式分解非常大的数字非常困难。没有已知的算法可以快速完成。
-
我认为在我的情况下,如果它包含几秒钟或几分钟是没有问题的。但我不知道为什么我会得到这些错误的输出。是的,我知道像这样的大数很难分解。真的很伤心,没有人找到有效的算法
-
这些是舍入错误,请使用
y = x//i而不是int(x/y),就像您在算法 I 中所做的那样。 -
感谢您的建议。所以这就像在不四舍五入结果的情况下精确除法?
标签: python numbers output primes factorization