首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不知道为什么,但是当我运行下面的代码时,它作为质数返回9

我不知道为什么,但是当我运行下面的代码时,它作为质数返回9
EN

Stack Overflow用户
提问于 2020-07-09 11:27:10
回答 2查看 45关注 0票数 1

Im应该创建一个函数,该函数接受整数,如果它是素数,则返回它,但由于某种原因,它返回9为素数。

代码语言:javascript
复制
def prime(x):
    if x == 0 or x == 1:
        return "not prime"
    elif x == 2:
           return "prime"
    else:
      for numbers in range(2,x):
       if x % numbers == 0:
            return "not prime"
       else:
            return "prime"

for i in range(20):
    print (i, prime(i))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-09 11:31:50

第一个数字要么是偶数,要么是素数。

9是代码中的bug真正显示的第一个数字。

错误是:如果一个测试失败,就返回“质数”。由于9 % 2不是0,所以测试在那里失败。

(天真地)改写为:

代码语言:javascript
复制
  for numbers in range(2,x):
     if x % numbers == 0:
          return "not prime"
  return "prime"

因此,如果循环结束而不返回,则数字是素数。

请注意,有更好的和更快的方法来测试原始性。例如,不要循环到x-1,而是循环到x的平方根(包括),因为在该值之后不存在除数。

代码语言:javascript
复制
 for numbers in range(2,int(x**0.5)+1):
票数 2
EN

Stack Overflow用户

发布于 2020-07-09 11:34:44

您的代码将在第一次迭代时返回一个答案,此时它将停止迭代:

代码语言:javascript
复制
for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
  else:
    return "prime"

这从2开始,如果它均匀地进入x,它返回的不是素数,如果不是它返回素数,那么它就会停止。

代码语言:javascript
复制
for numbers in range(2,x):
  if x % numbers == 0:
    return "not prime"
return "prime"

不过,这样做是可行的,因为只有当没有一个数字返回“非素数”时,它才会返回“质数”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62813792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档