用卢卡斯-莱默迭代法求梅森数
Finding Mersenne numbers using Lucas-Lehmer iteration
我目前正在编写一个c++程序来查找梅森素数,利用MS Win8.1上的ttmath api。我已经写了卢卡斯-莱默算法,但无论我尝试什么值,我总是得到一个没有梅森数的消息。有人能指出我的卢卡斯-莱默算法中的错误吗?
void LLIteration::calculate()
{
ttmath::UInt<100> num = 2;
ttmath::UInt<100> s = 4;
(num.Pow(this->exp));
num = num-1;
for(int i = 3; i < exp; ++i){
s = (s*s-2) % num;
std::cout << s << std::endl;
}
if(s == 0){
std::cout << "Found Mersenne prime, 2^" << exp << " = " << num << std::endl;
} else {
std::cout << "no prime 2^" << exp << " = " << num << std::endl;
}
}
就像我说的,我总是收到无质数的信息,我不知道为什么。Exp是一个int型,表示2的幂,其余的很简单。
提前感谢!
在维基百科上查找这篇文章。
如果你完全遵循文章,循环应该是
for (int i = 1; i <= exp - 2; ++i)
这是exp - 2次循环。你只迭代exp - 3次。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在C++上实现高斯赛德尔迭代方法
- 为什么斯科特·迈耶斯(Scott Meyers)建议更喜欢"迭代器"而不是"const_i
- 迭代卡拉苏巴算法在C++中使用OpenACC并行化和矢量化
- 使用迭代器和可变参数模板的笛卡尔乘积
- 用于双向迭代器的高德纳-莫里斯-普拉特算法
- C++ 笛卡尔乘积迭代器在第一次迭代时调用基类函数
- 用卢卡斯-莱默迭代法求梅森数