在Python中查找素数

时间:2017-08-26 04:51:56

标签: python python-3.x primes

我需要编写一个函数TRUE,它接受​​一个整数n>如果数字是素数,则返回False,否则返回False。但是当我输入2时,它总是返回def is_prime(x): if(x > 1): for i in range(2,x+1): if( x % i == 0): return False else: return True else: return False 。无论如何要纠正这个?

*scanf

3 个答案:

答案 0 :(得分:2)

您也可以使用SymPy模块

,而不是这样做
import sympy

sympy.isprime(5)

结果:

True

答案 1 :(得分:1)

两个问题:
第一个问题是范围包括数字本身,这意味着它将始终返回true(对于数字> 1),因为素数可以自行划分......

修正:将range(2,x+1)更改为:range(2, x)

第二个问题,第一个else应该与for对齐(我们只有在尝试了所有数字后才会返回true并确保它们都没有划分x

固定代码:

def is_prime(x):
    if x > 1:
        for i in range(2,x):
            if x % i == 0:
                return False
        else:
            return True
    else:
        return False

答案 2 :(得分:0)

虽然@ alfasin的解决方案是正确的(+1),但我发现sp <- split(dat, dat$nutrient.component.) res <- lapply(sp, function(x){ if(nrow(x) == 2 & is.na(x$nutrients[x$grain == "Brown Rice"])) x$grain[x$grain == "Brown Rice"] <- "White Rice" x } ) rm(sp) # tidy up res <- do.call(rbind, res) res 的使用使得理解起来更具挑战性。

else循环上的else特别要求我重读Python文档,因为大多数消息来源称for表示 没有中断 ,但这实际上意味着 正常完成 ,对于根本没有运行的循环,这是正确的!

这是我的修改删除了else语句,这些语句并非严格需要:

else

正如其他人会指出的那样,这可能是一个低效的主要测试,你可以写。但它确实有效。