如何解决我该怎么做才能运行此代码不更改代码
我正在解决关于 Project Euler(最大素因数)的第三个问题,我是 Python 3 的初学者。
这是我想出的解决方案,它有效但不适用于非常大的数字
x=int(input("Enter a number:"))
a=[]
for i in range(1,x+1):
cnt=0
if x%i==0:
for j in range(1,i+1):
if i%j==0:
cnt=cnt+1
if cnt==2:
a.append(i)
print(a[len(a)-1])
我理解它非常基础,而且运行大型输入太慢,但是编译器有什么办法可以给我这个输入的输出 - 600851475143。我尝试使用 pypy3,它也花了太长时间。
这是我第一次使用 stackoverflow,所以如果我做错了什么,请告诉我。
解决方法
我知道您说过不想更改代码,但如果您想有效地解决它,则必须这样做。
实际上有一个专门用于此 eulerlib
的库,但内置的 math
模块也可以做到这一点。
如果你想在没有模块的情况下使用 python,你可以试试这个,但对于大数字来说它可能同样慢
def Largest_Prime_Factor(n):
prime_factor = 1
i = 2
while i <= n / i:
if n % i == 0:
prime_factor = i
n /= i
else:
i += 1
prime_factor = max(prime_factor,n)
return prime_factor
内置的 math
模块也可以做到这一点,而且速度要快得多。由于它是内置的,因此您不需要任何外部库,例如 eulerlib
import math
# Getting input from user
n = int(input("Enter the number : "))
maxPrimeFactor = 0
# Checking and converting the number to odd
while n % 2 == 0:
maxPrimeFactor = 2
n = n/2
# Finding and dividing the number by all
# prime factors and replacing maxPrimeFactor
for i in range(3,int(math.sqrt(n)) + 1,2):
while n % i == 0:
maxPrimeFactor = i
n = n / i
if n > 2:
maxPrimeFactor = n
print("The largest prime Factor of the number is ",int(maxPrimeFactor))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。