使用Lucas-Lehmer迭代查找Mersenne数

Hen*_*old 3 c++ algorithm math primes

我目前正在编写一个C++程序,利用MS Win8.1上的ttmath api来查找Mersenne素数.我已经编写了Lucas-Lehmer算法,但无论我尝试什么价值,我总是得到一个没有Mersenne-number的消息.有人能指出我的Lucas-Lehmer算法中的错误吗?

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,我总是得到没有主要信息,我无法弄清楚为什么.Exp是一个表示将2加到的幂的int,其余的非常简单.

提前致谢!

gna*_*729 5

查看维基百科上的文章.

如果你完全按照文章,循环应该是

for (int i = 1; i <= exp - 2; ++i)
Run Code Online (Sandbox Code Playgroud)

这是exp - 循环的2次迭代.你的只迭代exp - 3次.