繁体   English   中英

使用 For 循环查找 x 个质数的 Python 代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM