用卢卡斯-莱默迭代法求梅森数

Finding Mersenne numbers using Lucas-Lehmer iteration

本文关键字:迭代 卢卡斯      更新时间:2023-10-16

我目前正在编写一个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次。