这是检验特殊质数最快的新方法吗
Is this the fastest way and a new way to test special prime numbers?
示例代码:
bool is_special_prime (int N) {
QHash<int, int> o;
struct A_functor
{
int operator()(unsigned int n) { return n >> __builtin_ctz(n);}
}A;
int k = A(N + 1);
if(k == 1)
return 0;
o[k] = k;
int t = (N - 5) >> 1;
for(int i = 0; i < t; i++) {
k = A(N + k);
if(k == 1 || o.contains(k))
return 0;
o[k] = k;
}
return 1;
}
是否可以测试大于最近最大素数2 ^ 57885161−1的数?
你读过卢卡斯-莱默的故事吗?听起来,在你找到新的、更快的方法来测试质数之前,你还有更多的研究要做。尝试先用bignum库实现Lucas-Lehmer。
你的算法迭代到N/2,到目前为止还不够快,实际上它确实非常慢(比质数慢得多)。它也永远找不到大于2^32或2^64的质数,这比2^57885161要小得多。你知道它为什么这么慢吗?它不能返回1,直到它循环i的值小于N/2。
我还没有检查你的代码是否准确地确定质数
您正在传递int
类型,该类型可以在32位系统上保存-2^31 to 2^31-1
范围内的数字。您不能使用它来测试您所提到的顺序
是否可以测试大于最近最大素数2 ^ 57885161−1的数?
如果你碰巧使用int
至少是57885162位宽的平台,那么是的(假设你的算法是正确的,我没有费心去检查)。
现在,让我们严肃一点:现在的消费级计算机最多使用64位宽的整数,你可以看到,从这个假设的平台来看,这是一个相当长的机会…
如果您想执行这样的计算,您需要用BigNum库替换int
(并且在此过程中也会有其他约束—请自己做好准备)。
相关文章:
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- C++11 迭代向量的新方法?
- 将 malloc 转换为新的正确方法
- 从 Rcpp 函数返回指向"新"对象的指针的正确方法
- 主窗口的新方法不可见
- 在C++使用新方法打印2d阵列
- 将对象分配给C 的预定义地址,而无需放置新方法
- G 破碎了?无法在课堂上添加新方法
- 通过添加新方法来发展类
- 重新编译二进制类或派生类,以便在基类中添加新方法
- 基类没有新方法错误
- COM / DCOM:服务器存根不会为现有接口中的新方法分配内存
- Qt C++新的类似方法.我是重载方法、编写新方法还是使用默认参数
- 将新方法的方法指针传递到基类
- 这是检验特殊质数最快的新方法吗
- 为什么C++不允许向类添加新方法?
- 在chrome中注入dll的新方法
- 如何检查是否正在编写新方法或覆盖现有方法
- 向 Cocos2d-x SimpleAudioEngine 添加新方法
- 向链表添加新节点的新方法