gpt4 book ai didi

python - 在 Python 3.4.1 中查找素数

转载 作者:行者123 更新时间:2023-12-01 20:16:31 25 4
gpt4 key购买 nike

for n in range(2,10):
for x in range(2,n):
if n%x==0:
print(n, 'equals to', x, '*', n//x)
break
else:
print(n, 'is a prime number')

下面是我收到的输出。

3 is a prime number
4 equals to 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals to 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals to 2 * 4
9 is a prime number
9 equals to 3 * 3

但是,它正在重复这些值。而且9不是素数。请帮助我纠正语法。

以下是链接: https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

最佳答案

如您所见,您的程序会检查n是否可以被一个因子整除。如果是,那就太好了,您可以正确打印出它是复合的。如果不是,您立即打印它是一个素数。问题是,在检查了其余因素之前,您不知道这一点。 9 不能被 2 整除并不意味着它是质数。您还必须检查 3 个。

这意味着稍微改变一下你的逻辑。在声明 n 是质数之前,您需要检查所有可能的因素。一种方法是使用额外的 bool 变量。

for n in range(2,10):
is_prime = True

for x in range(2,n):
if n%x==0:
print(n, 'equals to', x, '*', n//x)
is_prime = False
break

if is_prime:
print(n, 'is a prime number')

请注意,“is a prime number”打印输出不再位于内部循环内部,而是位于内部循环外部。

实现此目的的另一种方法是使用一个很酷的 Python 技巧,并向内部循环添加一个 else 子句。仅当循环退出而未命中 break 语句时,else 子句才会发生。

for n in range(2,10):
for x in range(2,n):
if n%x==0:
print(n, 'equals to', x, '*', n//x)
break
else:
print(n, 'is a prime number')

请注意,将 else 子句附加到循环上的想法是 Python 主义。它在 C 或 Java 等其他语言中不存在。因此,虽然很简洁,但了解基于 bool 变量的解决方案也很有好处。该技术适用于任何语言。

关于python - 在 Python 3.4.1 中查找素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25820325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com