无法在循环中更改 bool var 状态
Failing to change bool var state in loop
我正在尝试根据以下内容编写质数检查器: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
7 mod 3 = 1 (素数)
我不知道 prime
var 没有更新。有人可以帮忙解释一下吗?
编辑:链接一些 repl -> Repl Link
你实际上没有分配:
prime == True
应该是:
prime = True
==
是比较运算符,=
是赋值运算符。
您可以使用any
函数来创建您的质数检查器,我们也只需要循环到x的平方根并检查奇数。我还添加了 link:
中提到的 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
我正在尝试根据以下内容编写质数检查器: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
7 mod 3 = 1 (素数)
我不知道 prime
var 没有更新。有人可以帮忙解释一下吗?
编辑:链接一些 repl -> Repl Link
你实际上没有分配:
prime == True
应该是:
prime = True
==
是比较运算符,=
是赋值运算符。
您可以使用any
函数来创建您的质数检查器,我们也只需要循环到x的平方根并检查奇数。我还添加了 link:
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