algorithm - 给出素数的最有效算法是什么,最高值(所有 32 位机器都可以处理)
问题描述
我的程序应该永远循环并通过 print 给出它出现的每个素数。顺便说一句,在 x86-NASM 中执行此操作。
我的第一次尝试将它除以之前的每个数字,直到进位为 0(不是素数)或结果为 1。
我的第二次尝试通过仅每秒测试一次来改进这一点,所以只有奇数。
我目前正在实施的第三件事是尝试不除以之前的每个数字,而是将之前的所有数字除以 2,因为你不能通过将数字除以大于一半的数字来得到偶数
另一件可能有帮助的事情是只用奇数来测试它,比如埃拉托色尼筛,但只排除偶数。
无论如何,如果我能做另一件事,欢迎大家帮忙。
解决方案
如果您需要测试少数几个(可能只有一个)素数,AKS 素数测试是长度为 的多项式n
。
如果你想找到一个非常大的密码大小的素数,那么选择一个随机范围的奇数并筛选出所有因数为小素数的数字(例如小于64K-240K),然后测试剩余数字的素数。
如果你想在一个范围内找到素数然后使用筛子,Erathostenes 筛子很容易实现,但运行速度较慢,需要更多内存。Atkin
的筛子速度更快,轮子筛子需要的内存要少得多。
如果天真地接近问题的大小是指数级的,因此在微观优化必须首先进行宏观优化之前。
或多或少,所有素数算法都需要对数论有信心,因此要特别注意算法正在处理的组/环/场,因为数学家为所有代数结构编写了诸如逆或乘法之类的运算。
一旦你有了一个快速的算法,你就可以开始微优化。
在这个级别上,真的不可能回答如何进行这样的优化。
推荐阅读
- swift - 在 swift 中使用 OCR 扫描发票
- html - 间距不会产生边距
- python - 张量流中的 output_data[output_ids == i] = input_data[input_ids == i]
- wordpress - 链接 rel='preload' 给出 404 错误,但文件在那里
- django - Django REST 框架 - 要求 BooleanField 为真
- recursion - 如果函数仅取决于一个参数,如何递归执行
- excel - 如何以更快的方式遍历合并的单元格
- java - 如何使方面在方法 AService.methodB() 上工作?
- javascript - redux connect mapStateToProps not called when action is dispatched
- postgresql - PostgreSQL 和 pgAdmin 都在 Docker 容器中运行并连接