我的数论-素数部分博客共5part:
基本概念、性质、猜想、定理
素数筛法(埃式筛、欧拉筛、区间筛)
素数判断法(朴素法、模6法、Rabin-Miller及改进)
数的分解(Pollard-rho)
梅森素数(Lucas_Lehmer判定法)
梅森素数
-
梅森数&梅森素数: m ∈ N ∗ 且 是 素 数 , M n = 2 m − 1 m\in N^*且是素数,M_n=2^m-1 m∈N∗且是素数,Mn=2m−1 , M n M_n Mn 称第 n n n 个梅森数;若 M n M_n Mn 也是素数,则为梅森素数。
-
梅森素数 M p ⇒ p M_p\Rightarrow p Mp⇒p 是素数
-
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,rk≡rk−12−2(modMp) 。 M p 是 素 数 ⇔ r p − 1 ≡ 0 ( m o d M p ) M_p是素数\Leftrightarrow r_{p-1}\equiv 0(\mod M_p) Mp是素数⇔rp−1≡0(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; }