首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >素数乘以3表示素数

素数乘以3表示素数
EN

Stack Overflow用户
提问于 2015-05-31 04:26:20
回答 3查看 91关注 0票数 2

我试图在Python中创建一个函数,以检查给定的数字是否为素数,因此我编写了以下代码:

代码语言:javascript
复制
def is_prime(x):
    if x<2:
        return False
    elif x==2:
        return True
    else:
        for n in range(2,x):
            if (x%n)==0:
                return False
            else:
                return True

由于某种原因,每一个(Prime_number*3)和的数都表示为素数(例如,这些数字表示为素数:9,21,15,25.)有人能看出我的代码有问题吗?

EN

回答 3

Stack Overflow用户

发布于 2015-05-31 04:32:59

因为您在循环的第一次迭代中是return的。在循环耗尽之前,您不可能知道某些东西是最佳的。因此,在迭代完成之前不要返回True

代码语言:javascript
复制
def is_prime(x):
    if x<2:
        return False
    elif x==2:
        return True
    else:
        for n in range(2,x):
            if (x%n)==0:
                return False
        return True
票数 2
EN

Stack Overflow用户

发布于 2015-05-31 04:33:38

这是会发生的,因为在循环的第一次迭代中,您就从is_prime返回。您可以测试x是否可以被2除,如果是,则返回True,否则返回False

从循环中删除else子句,并在它结束后返回True

代码语言:javascript
复制
def is_prime(x):
    if x<2:
        return False
    elif x==2:
        return True
    else:
        for n in range(2,x):
            if (x%n)==0:
                return False
        return True
票数 2
EN

Stack Overflow用户

发布于 2015-05-31 08:24:47

一个更有效的方法只能迭代x的平方根。

代码语言:javascript
复制
import math;
def isPrime(x):
    if x < 2:
        return False;
    elif x == 2:
        return True;
    else:
        for n in range(2, int(math.sqrt(x))+1):
            if x%n == 0:
                return False;
        return True;

# Test the method for first 50 natural numbers
for i in range(51):
    if isPrime(i):
        print i;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30553824

复制
相关文章

相似问题

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