我应该怎么做才能运行此代码(不更改代码)

Posted

技术标签:

【中文标题】我应该怎么做才能运行此代码(不更改代码)【英文标题】:What should I do to get this code running (without changing the code) 【发布时间】:2021-07-18 08:55:05 【问题描述】:

我正在解决关于 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,它也花费了太长时间。

这是我第一次使用 ***,所以如果我做错了什么,请告诉我。

【问题讨论】:

如果代码有缺陷,你真的不能指望在不更改代码的情况下将其删除。你不能神奇地让慢代码运行得更快;你真的需要想出一个资源密集度较低的算法。 究竟为什么要添加“不更改代码”作为您的问题的要求?这是您的代码,如果它没有按照您的意愿执行,您需要进行更改。 想象你有一辆手推车,然后你问,有什么我可以在路上做的,这样我就可以在不更换自行车的情况下以 70 英里/小时的速度骑行吗?答案是您不仅需要更换自行车,还需要另一种车辆。 感谢您的回复,我很抱歉添加了该内容。我知道我必须学习新的算法/方法,以便我的代码更有效、更快。我假设你以前遇到过这样的问题,所以你能否建议我应该开始学习/练习什么主题,以便我可以用不同的方法开始解决类似的问题。 【参考方案1】:

我知道您说过您不想更改代码,但如果您想有效地解决它,您必须这样做。 实际上这个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))

【讨论】:

以上是关于我应该怎么做才能运行此代码(不更改代码)的主要内容,如果未能解决你的问题,请参考以下文章

我想在特定时间运行 R 代码

更改代码后Vue组件未更新[关闭]

VC++中运行C语言一个工程总可以运行多个代码吗?

更改音频缓冲区的音高

如何使此代码运行得更好/更快(线程或多处理)?怎么做?

如何确保某些代码每 1 秒运行不超过 1 次?