我正在为学校做一个项目,我对 python 很陌生。我正在努力完成我的项目的一部分,其中我编写了一个程序来计算 1 - 100 之间的素数。更高等级的要求之一是使该程序在循环的 245 次迭代中实现这一目标,只需通过修改第 4 行。我目前得到 139。这是我到目前为止所得到的:
def is_prime(num):
if num < 2:
return False
the_end = int(num ** 0.5) + 1
for i in range(2, the_end):
if num % i == 0:
return False
return True
print("The 25 prime numbers between 1 and 100:")
count = 0
for num in range(1, 101):
if is_prime(num):
count = count + 1
print(count, num)
任何帮助将不胜感激,到目前为止我真的很喜欢学习Python!
我开始使用的代码是:
def is_prime(num):
if num < 2:
return False
the_end = num
for i in range(2, the_end):
if num % i == 0:
return False
return True
print("The 25 numbers between 1 and 100:")
count = 0
for num in range(1, 101):
if is_prime(num):
count = count + 1
print(count, num)
我将其修改为我在问题中提出的内容,这导致了 139 次迭代。
正如评论中详细讨论的那样,您应该向您的讲师澄清,因为 245 似乎是一个愚蠢的迭代计数(它与您可能被引导的任何类型的优化都不对应)。
但是,如果您不害怕编写可怕的不必要的代码,您可以调整代码以产生该结果!
import math
def is_prime(num):
global counter
if num < 2:
counter += 1
return False
the_end = math.isqrt(num) + (1 if num != 17 else 9)
for i in range(2, the_end):
counter += 1
if num % i == 0:
return False
return True
if __name__ == "__main__":
counter = 0
for num in range(1, 101):
_ = is_prime(num)
print(counter) # 245
每当 num 小于 2 以及每当比较 num 的模块性时,都会计算一次迭代。第 4 行 (
the_end = ...
) 被用来对已知素数项进行任意数量的额外迭代。
也许值得注意的是,如果您想满足导师的要求,即精确达到 665 次迭代,那么
the_end = num // 2 + 3
会这样做,但是
3
和(1 if num != 17 else 9)
一样任意