【数论】素数(五):梅森素数(Lucas_Lehmer判定法)

我的数论-素数部分博客共5part:
基本概念、性质、猜想、定理
素数筛法(埃式筛、欧拉筛、区间筛)
素数判断法(朴素法、模6法、Rabin-Miller及改进)
数的分解(Pollard-rho)
梅森素数(Lucas_Lehmer判定法)

梅森素数

  • 梅森数&梅森素数: m ∈ N ∗ 且 是 素 数 , M n = 2 m − 1 m\in N^*且是素数,M_n=2^m-1 mN,Mn=2m1 M n M_n Mn 称第 n n n 个梅森数;若 M n M_n Mn 也是素数,则为梅森素数。

  • 梅森素数 M p ⇒ p M_p\Rightarrow p Mpp 是素数

  • Lucas-Lehmer判定方法: 构造序列 { r k } \{r_k\} {rk} r 1 = 4 , r k ≡ r k − 1 2 − 2 ( m o d    M p ) r_1=4,r_k\equiv r_{k-1}^2-2(\mod M_p) r1=4,rkrk122(modMp) M p 是 素 数 ⇔ r p − 1 ≡ 0 ( m o d    M p ) M_p是素数\Leftrightarrow r_{p-1}\equiv 0(\mod M_p) Mprp10(modMp) ,复杂度 O ( p 3 ) O(p^3) O(p3)

    // multi_add(a,b,m) : 计算a*b mod m,防止溢出
    bool Lucas_Lehmer(int p) // M_p=2^p-1是否为素数
    {
        ll r[100];
        ll m = (1ll << p) - 1;
        r[1] = 4ll;
        if(p==2)
            return true;
        for (int i = 2;i<p;i++)
            r[i] = (multi_add(r[i - 1], r[i - 1], m) - 2) % m;
        return r[p - 1] ? false : true;
    }
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值