[英]Python Code to Find x Prime Numbers w/ For Loop?
我正在尝试编写一个可以计算 n 个素数的简单程序。 我想通过使用嵌套的 for 循环来做到这一点,其中一个将遍历数字,另一个将该数字除以所有数字,以查看它是否可以被任何东西整除。
我遇到的问题是,在主 for 循环中,我需要从 2 开始,因为 1 会弄乱系统,我不希望它被视为素数。 然而,对于具有起始编号的循环,它还需要一个结束编号,这在这种情况下很困难,因为在循环工作之前很难生成所需的最大素数。
这是我现在正在使用的程序。 我标记 X 的地方是我需要以某种方式为 For 循环添加结束编号的地方。 我想如果我让 For 循环完全打开,并且简单地去掉循环本身中 '1' 会产生的任何东西,那会简单得多,但这感觉就像作弊,我想把它做对。
check = 0
limit = int(input("Enter the amount of Prime Numbers"))
for i in range(2,X):
check = 0
if i > 1:
for j in range(2,i):
if (i % j) == 0:
check = 1
if check == 0:
print (i)
谢谢你的帮助!
您可以使用生成器对象逐步处理无限数量的数字。
在代码顶部附近的某处插入以下内容:
def infinite_number_generator(initial_value=2):
""" Generates an infinite amount of numbers """
i = initial_value
while True:
yield i
i += 1
它的作用是创建一个函数来构造生成器对象,当它们到达yield
语句时“暂停”以“yield” yield
命令指定的任何值,然后从yield
语句下方的下一行继续执行。
Python 自己的range
函数本身就是一个生成器的例子,大致相当于(忽略 step 参数和其他特性)
def range(start, end):
i = start
while i < end:
yield i
i += 1
所以你的程序看起来像这样:
def infinite_number_generator(initial_value=2):
""" Generates an infinite amount of numbers """
i = initial_value
while True:
yield i
i += 1
check = 0
limit = int(input("Enter the amount of Prime Numbers"))
for i in infinite_number_generator():
check = 0
for j in range(2,i):
if (i % j) == 0:
check = 1
if check == 0:
print (i)
if i == limit:
break
我还应该指出,您提供的代码有问题 - 它永远不会停止打印,因为没有检查您是否已经找到了质数的limit
数量。
这应该做你想做的。
check = 0
limit = int(input("Enter the amount of Prime Numbers"))
counter = 0
i = 2
while counter < limit:
check = 0
if i > 1:
for j in range(2,i):
if (i % j) == 0:
check = 1
if check == 0:
counter += 1
print (i)
i += 1
在您的代码中,您以 2 开始i
并始终递增 1,因此i
将始终保持大于 1,因此if i > 1
的测试是无用的。 为了提高效率,您可以在 i 或 i/2 的平方处停止检查([i/2 + 1, i[ 中没有除数)。 您可以按如下方式更新您的代码:
n = int(input("Enter the amount of Prime Numbers: "))
FoundPrimes = 0
i = 2
while FoundPrimes < n:
isPrime = True
for j in range(2,1 + i//2):
if (i % j) == 0:
isPrime = False
if isPrime:
FoundPrimes += 1
print(i, end = '\t')
i += 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.