【问题标题】:Finding Mersenne numbers using Lucas-Lehmer iteration使用 Lucas-Lehmer 迭代查找梅森数
【发布时间】:2014-03-22 00:43:50
【问题描述】:

我目前正在编写一个 C++ 程序来查找梅森素数,利用 MS Win8.1 上的 ttmath api。我已经编写了 Lucas-Lehmer 算法,但是无论我尝试什么值,我总是得到一个没有梅森数的消息。有人可以指出我的 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;
    }
}

就像我说的,我总是收到非主要信息,我不知道为什么。 Exp 是一个 int,表示将 2 提高到的幂,其余部分非常简单。

提前致谢!

【问题讨论】:

    标签: c++ algorithm math primes


    【解决方案1】:

    在维基百科上查找文章。

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

    for (int i = 1; i <= exp - 2; ++i)
    

    这是 exp - 循环的 2 次迭代。您的仅迭代 exp - 3 次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多