首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找质数

查找质数
EN

Stack Overflow用户
提问于 2016-04-15 04:15:05
回答 4查看 122关注 0票数 0

问题是,您需要在数字输入后找到质数,或者如果输入的数字是质数,则返回该质数。它工作得很好。当输入为print(brute_prime(1000))时,它就不起作用了。它返回1001而不是1009。完整的代码如下:

代码语言:javascript
复制
def brute_prime(n):
    for i in range(2, int(n**(0.5))):
        if n % i == 0:
            n += 1
    else:
        return n
EN

回答 4

Stack Overflow用户

发布于 2016-04-15 04:34:22

当您发现一个数字不是质数并转到下一个数字时,您不会重新启动for i循环。这有两个问题:您不会检查下一个数字是否是前面检查的任何因子的倍数,也不会使用新值n将范围的末尾增加到int(n ** 0.5)

代码语言:javascript
复制
def brute_prime(n):
    while true:
        prime = true
        for i in range(2, int(n ** 0.5)+1):
            if n % i == 0:
                prime = false
                break
        if prime:
            return n
        n += 1

break将退出for循环,while true:将在n递增后重新启动它。

票数 0
EN

Stack Overflow用户

发布于 2016-04-15 04:45:26

正如Barmar建议的那样,每次递增n时都需要重新启动循环。范围也会提前结束,因为范围在第二个参数之前停止。

代码语言:javascript
复制
def brute_prime(n):
    while True:
        for i in range(2, int(n**(0.5)) + 1):
            if n % i == 0:
                break
        else:
            return n
        n = n+1
票数 0
EN

Stack Overflow用户

发布于 2016-04-15 10:28:52

记住2是一个质数。同样,您可以只检查除以2,并跳过所有偶数除法

代码语言:javascript
复制
 def brute_prime(n):
        while True:
            if n==2:return n
            elif n%2 ==0 or any(n % i==0 for i in range(3, int(n**(0.5)+1),2)):
                n += 1
            else:
                return n
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36633101

复制
相关文章

相似问题

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