首页 > 编程语言 >Millar-Rabin 米勒罗宾算法小结 (内附费马小定理证明以及二次探测定理证明)

Millar-Rabin 米勒罗宾算法小结 (内附费马小定理证明以及二次探测定理证明)

时间:2022-09-01 13:35:33浏览次数:91  
标签:ch Millar pmod 定理 while 罗宾 ll equiv

因为他我学了龟速乘

Millar-robin 米勒罗宾

这个小东西是用来素数判定的,且听我细细道来。

前置知识

  • 肥妈小定理 又名费马小定理
    当一个数 \(x\) 不是一个质数 \(p\) 的倍数时有:

    \[x^{p-1} \equiv 1 \pmod{p} \]

    证明:

    对于一个序列

    \[b = \left \{1,2,3....p-1\right \} \]

    \[a = \left \{ x,2x,3x...(p-1)x \right \} \]

    那么 \(a\) 序列对 \(p\) 取模后恰好为 \(p-1\) 的一个排列。

    证明:
    假设存在 \(s,t\) 使得 \(sx \equiv tx \pmod p\)
    那么 \((s-t)x \equiv 0 \pmod p\)
    又有 \(x \ne 0 \pmod p \wedge s-t < p\)
    所以 \(s-t=0\)
    所以不存在两个位置模数相同,又有互质,所以模数恰好是一个 \(p-1\) 的排列。

    (分割线)

    所以有

    \[(p-1)! \equiv (p-1)! \times x^{p-1} \pmod p \]

    那么根据

    \[\gcd((p-1)!,p) = 1 \]

    所以有

    \[x^{p-1} \equiv 1 \pmod p \]

  • 二次探测定理
    对于质数 \(p\) 和一个 \(x \in \left [1,p-1 \right ]\)

    \[x^2 \equiv 1 \pmod p \]

    则有

    \[x_{1} = 1,x_{2} = {p-1} \]

    证明

    \[x^2 - 1 \equiv 0 \pmod p \]

    \[(x+1)(x-1) \equiv 0 \pmod p \]

    故当

    \[x+1 \equiv 0 \pmod p \]

    \[x = p - 1 \]

    \[x - 1 \equiv 0 \pmod p \]

    \[x = 1 \]

进入正题

如何检查 \(n\) 是否是质数?

首先忽略 \(2\) 的情况,那么 \(n\) 必定为奇,那么 \(n-1\) 必定为偶。

令 \(n-1 = 2^k \times m\)

米勒罗宾是通过费马小定理来测试 \(n\) 是否为素数的。

由费马小定理有这样的式子,若 $n $ 为质数那么 \(x^{n-1} \equiv 1 \pmod n\),但是这只是 \(n\) 是素数的必要条件,所以这是一个 \(\mathbf{测试}\) 算法。

考虑我们怎么能得到这样的式子,接下来默认 \(y \in [1,n-1]\) ,因为用到了二次探测。

若 \(y^{n-1} \equiv y^{2^km} \equiv1 \pmod n\)

那么 \(y^{2^{k-1}m} = 1\) 或 \(n-1\)

若 \(y^{2^{k-1}m} = 1\) 则 \(y^{2^{k-2}m} = 1\) 或 \(n-1\)

如此反复直到最后 \(y^m = 1\) 或 \(y^m = n - 1\)。

若 \(n\) 是质数,那么 \(y^m = 1\) 或者 存在 \(g\in[0,k-1]\) 使得 \(y^{2^gm} = n - 1\) 符合该条件则通过测试

这个测试,合数不一定通不过,素数肯定通过,所以通过的不一定是素数,通不过的一定是合数 我在说什么

我们选用素数来测试 \(n\),算法竞赛中选 \(30\) 内的就足以让 unsigned long long 范围内的数合法。选的数越多,这个算法越准。至于更深的探究,我也不会了。

例题 sp288

code :

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i<(b);++i)
#define rrep(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
template <typename T>
inline void read(T &x){
	x=0;char ch=getchar();bool f=0;
	while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	if(f)x=-x;
}
template <typename T,typename ...Args>
inline void read(T &tmp,Args &...tmps){read(tmp);read(tmps...);}
typedef long long ll;
ll pr[10] = {2,3,5,7,11,13,17,19,23,29};
inline void add(ll &x,ll y,ll z){
	x += y;
	if(x >= z)x -= z;
}
ll gui_mul(ll x,ll y,ll z){
	ll ans = 0;
	while(y){
		if(y & 1)ans = (ans + x) % z;
		x = (x + x) % z;
		y >>= 1;
	}
	return ans;
}
ll ksm(ll x,ll y,ll z){
	ll res = 1;
	while(y){
		if(y & 1)res = gui_mul(res,x,z);
		x = gui_mul(x,x,z);
		y >>= 1;
	}
	return res;
}
bool millar_rabin(ll p){
	if(p < 2)return 0;
	if(p != 2 && p % 2 == 0)return 0;
	ll s = p - 1;
	while(!((s) & 1))s >>= 1;
	rep(i,0,9){
		if(p == pr[i])return 1;
		ll t = s,m = ksm(pr[i],s,p);
		while(t != (p - 1) && m != 1 && m != p - 1){
			m = gui_mul(m,m,p);
			t <<= 1;
		}
		if(m != p - 1 && !(t & 1))return 0;
	}
	return 1;
}
signed main(){
	int t;
	read(t);
	while(t--){
		ll x;
		read(x);
		puts(millar_rabin(x) ? "YES" : "NO");
	}
}

标签:ch,Millar,pmod,定理,while,罗宾,ll,equiv
From: https://www.cnblogs.com/wsxxs/p/16646162.html

相关文章

  • [笔记] 兰道定理 Landau's Theorem
    兰道定理的内容:一个竞赛图强连通的充要条件是:把它的所有顶点按照入度d从小到大排序,对于任意\(k\in[0,n-1]\)都不满足\(\sum_{i=0}^kd_i=\binom{k+1}{2}\)。兰道定......
  • 如何应用 Riesz 表示定理
    如何应用Riesz表示定理Photoby亚伦负担on不飞溅渐近Riesz表示定理的应用(arXiv)作者:西蒙娜·马科维抽象的:正如Martinez和Trout[3]所介绍的,我......
  • HIT 校测 Round1 F - dp - 二项式定理 -
    题意:求\(x\in[0,10^n)\)的个数,使得\(4|x\)且\(x\)中数码4的个数为4的倍数,\(n\leq10^{16}\)题解:第一个条件可以转化为末两位为4的倍数。易知其中不含数码4的有18个,含1个......
  • 01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理
    博客......
  • 【科技】 中国剩余定理(CRT)
    给定形如这样的方程组:\[\begin{cases}x\equivb_1\pmod{a_1}\\x\equivb_2\pmod{a_2}\\\\\\\\vdots\\x\equivb_n\pmod{a_n}\end{cases}\]其中\(a_i......
  • 拓展中国剩余定理 exCRT
    求解如下形式的一元线性同余方程组(其中\(n_1,n_2,···,n_k\)不两两互质)\[\left\{ \begin{matrix}x&\equiv&a_1&(mod\n_1)\\ x&\equiv&a_2&(mod......
  • 贝祖定理
    中文名: 裴蜀定理别名: 贝祖定理外文名: Bézout'sidentity应用学科: 数学方程式是:丢番图方程(裴蜀方程)对任何整数a、b和它们的最大公约数gcd(a,b),关于未知数......
  • 1026 [NOIP2001]Car的旅行路线 标点建图 勾股定理 floyd
     链接:https://ac.nowcoder.com/acm/contest/26077/1026来源:牛客网题目描述又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个......
  • acwing204.表达整数的奇怪方式(中国剩余定理)
    中国剩余定理中国剩余定理百度百科不定方程\(ax+by=gcd(a,b)\)的解先用扩展欧几里得算法求得不定方程的一组特解:\(x_0,y_0\)则不定方程的通解为\[\left\{\begin......
  • 洛谷 P6789 - 寒妖王(子集卷积+矩阵树定理)
    洛谷题面传送门像极了我验的那道牛客多校(第六场CForest)……考虑对于每条边,计算其在最大生成基环森林中的概率,乘以边权求和就是答案。现在问题在于如何计算每条边在最大......