我试图根据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
答案 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