【问题标题】:listing prime numbers from 3 to 21 in python 3在 python 3 中列出从 3 到 21 的素数
【发布时间】:2018-12-13 02:27:39
【问题描述】:
for x in range (3,21):
    if(x%2==0):
        print (x,'is a not a prime number')
    else:
        print (x,'is a prime number')

这是我的代码,但打印出来时会显示 9 is a prime number15 is a prime number

这是错误的,因为它们不是,我该如何解决?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

.

def isPrime(N):
    i = 2
    while i**2 <= N:
        if N % i == 0:
            return False
        i+=1
    return True

for i in range(3, 21 + 1):
    if isPrime(i):
        print(i, 'is prime')
    else:
        print(i, 'is not a prime number')

首先,创建一个函数来确定给定数字是否为素数(这不是必需的,只是一个好的做法)。这个函数并不难:它只是从i = 2 开始(从 1 开始没有意义,因为每个数字都可以被它整除)并检查 N 是否可以被它整除。如果是这样,我们找到了 N 的一个除数,因此它不是素数。否则,继续下一个数字:i += 1。循环中最棘手的部分是停止条件:i**2 &lt;= N:我们不必进一步看,因为如果某些j &gt; i 是 N 的除数,那么还有一些其他的k &lt; i 也是 N 的除数:k * j == N。如果这样的 k 存在,我们会在到达i * i == N 之前找到它。就这样。之后,只需遍历每个要检查素数的数字。

顺便说一句,检查一组数字的素数的最佳方法是使用Sieve of Eratosthenes

【讨论】:

  • 谢谢!你介意解释一下这是如何快速工作的吗?就像为什么范围内的 +1 以及第一部分是什么?对不起,我是一个完整的初学者。
  • @BrendoCampos 我编辑了解释该代码作用的答案。范围内的 +1 只是为了确保 21 包含在检查中,因为range(3, 21) 在右侧返回一个开区间:[3, 21)
【解决方案2】:

您的代码仅检查数字是否为偶数。所有奇数都不是素数。因此,编写一个 for 循环来检查奇数是否可以被任何小于该奇数的奇数整除。有点像:

For i in (3 to n):如果 n mod i == 0,n 不是素数。

【讨论】:

  • 我知道问题出在 if 循环上,但其他所有查找素数的方法最终都会以某种方式弄乱整个列表。当我运行程序时,我希望它说“3 是质数”“4 不是质数”一直到 20 一次
猜你喜欢
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多