未能在循环中更改bool var状态

时间:2015-09-19 20:14:54

标签: python if-statement for-loop range

我试图根据Prime equations

编写一个素数检查器

到目前为止我的代码看起来像这样:

def primer(x):

    prime = False
    x = math.sqrt(x)
    if type(x) == float:
        x = math.ceil(x)

    for i in range(3,x + 1):
        if (i % 2) == 1:
            prime == True
    print(prime)

尝试使用37作为primer(37) ---> sqrt(37)是6.08

四舍五入到

7 mod 3 = 1(素数)

我不知道prime var没有更新。请问有人会发光吗?

编辑:关联一些代表 - > Repl Link

2 个答案:

答案 0 :(得分:7)

您实际上并未分配:

prime == True

应该是:

prime = True

==是一个比较运算符,=用于分配。

您可以使用any函数创建素数检查器,我们只需要循环到x的sqrt并检查奇数。我还添加了fermat's little theorem的实现,链接中提到了

def primer(x):
    if x == 2:
        return True
    if x % 2 == 0 or x < 3:
        return False
    return not any(x % i == 0 for i in range(3, int(x ** .5) + 1, 2))


from random import randint


def fermat_little_theorem(p, conf):
    """
     int p to test if prime
     conf is the confidence level/how many times to try n ** (p - 1) % p == 1
    returns with confidence p is prime based on 1/2^conf
    """
    if p <= 1:
        return False
    for _ in range(conf):
        n = randint(1, p - 1)
        if not n ** (p - 1) % p == 1:
            return False
    return True

答案 1 :(得分:-1)

Segmentation fault