python - 大整数素数检查算法
问题描述
我知道这是一个非常重复的问题,但我想了解我是否可以通过检查它是否可被 2、3、5 或 7 整除来简单地检查一个大整数(例如 157,632,829),或者我错过了角落案例?
IE。
if (n < 4) :
return True
if (n % 2 == 0 or n % 3 == 0 or n % 5 == 0 or n % 7 == 0) :
return False
解决方案
如果你不介意循环方法,那么你可以试试这个。在我的机器上运行 6 毫秒:
import math
import time
def gen_prime():
D = {}
q = 2
while True:
if q not in D:
yield q
D[q * q] = [q]
else:
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
def isprime(n):
if n >= 2:
g = gen_prime()
s = int(math.sqrt(n))
while True:
d = next(g)
if d > s:
return True
if n % d == 0:
break
return False
s = time.perf_counter()
r = isprime(157_632_829)
e = time.perf_counter()
print(f'{r} {e-s:.4f}s')
注意: gen_prime() 生成器不是我的。不幸的是,我不记得我从哪里得到它,所以不能给予信任
推荐阅读
- javascript - jQuery 选择器不适用于数据表
- flutter - 'flutter packages get' 因 node_preamble 投诉而失败
- python-3.x - 未找到模块错误:没有名为 config 的模块
- java - 如何在Android上实现父子Recyclerview
- javascript - 规范化数据的最合适位置在哪里?
- python - 将 Django 查询集转换为列表或字典
- regex - 关于正则表达式中嵌套组的说明
- javascript - 使用数据属性对 div 进行排序
- c++ - 为什么我无法覆盖虚拟功能?
- node.js - Mozilla Firefox 浏览器 POST 和 PUT 请求不起作用(MEAN 项目)