质数2:费马小定理,威尔逊定理,欧拉定理及其扩展

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ha_ing/article/details/100130396

质数2:费马小定理,威尔逊定理,欧拉定理及其扩展

费马小定理

费马小定理:当 p p 为质数时,有 a p a ( m o d p ) a^{p} \equiv a \pmod p ,如果再加上 a a p p 互质这一条件,得 a p 1 1 ( m o d p ) a^{p - 1} \equiv 1 \pmod p ,这个定理可用来求逆元,只要将式子转化为 a p 2 a 1 ( m o d p ) a^{p - 2} \equiv a^{-1} \pmod p ,这个定理不能用来准确判定质数,详情请搜索“伪质数”。
定理证明:由二项式定理,得: ( x + y ) p = x p + C p 1 x p 1 y + C p 2 x p 2 y 2 + + y p (x+y)^p = x^p + C^1_px^{p - 1}y+C^2_px^{p-2}y^2 + \cdot \cdot \cdot + y^p ,当 p p 为质数时,不难得出 p C p k , k = 1 , 2 , , p 1 p | C^k_p,k = 1,2,\cdot \cdot \cdot,p - 1 ,从而 ( x + y ) p x p + y p ( m o d p ) (x+y)^p \equiv x^p + y^p \pmod p ,此时,令 x = y = 1 x=y=1 ,得 2 p 2 ( m o d p ) 2^p \equiv 2 \pmod p ,令 x = 2 , y = 1 x=2,y=1 ,得 3 p ( 2 + 1 ) p 2 p + 1 p 2 + 1 3 ( m o d p ) 3^p \equiv (2 + 1)^p \equiv 2^p + 1^p \equiv 2 + 1 \equiv3 \pmod p ,即 3 p 3 ( m o d p ) 3^p \equiv 3 \pmod p ,以此类推,对于所有 a = 0 , 1 , , p 1 a=0,1,\cdot \cdot \cdot ,p-1 (太大了就会直接被模),都有 a p a ( m o d p ) a^{p} \equiv a \pmod p

威尔逊定理

威尔逊定理:若成立 ( p 1 ) ! 1 ( m o d p ) (p-1)! \equiv -1 \pmod p ,当且仅当 p p 为质数。
它的逆命题也成立,即满足 ( p 1 ) ! 1 ( m o d p ) (p-1)! \equiv -1 \pmod p 的数一定为质数。
这个定理可用来判定质数,然而,由于阶乘是一种呈爆炸性增长的运算,实际意义不大。
定理证明
充分性:设 p p 为质数,当 p = 2 p=2 时结论显然成立,当 p 3 p \ge 3 时,根据逆元的知识,对于 a = 1 , 2 ,   , p 1 a = 1,2,\cdots,p-1 (都与 p p 互质),总有一个数 a a' 使得 a a 1 ( m o d p ) a*a' \equiv 1 \pmod{p} ,并且对于一个数 a a a a' 显然不为0,故 a a' 一定在 1 , 2 ,   , p 1 1,2,\cdots,p-1 内有解,并且是唯一的。同时也不难得出 a a 不同时 a a' 也不相同。现在找出逆元与原数相同的情况,不难得出 a 2 1 ( m o d p ) a^2 \equiv 1 \pmod p ,从而 a 2 1 0 ( m o d p ) a^2 - 1 \equiv 0 \pmod p ,所以只有当 a a 为1和 p 1 p-1 时, a = a a'=a ,因此, 2 , 3 ,   , p 2 2,3,\cdots,p-2 ,中每两个互逆的元配对, Π i = 2 p 2 i 1 ( m o d p ) \Pi^{p-2}_{i=2}i \equiv 1 \pmod p ,从而 ( p 1 ) ! 1 1 p 3 2 ( p 1 ) 1 ( m o d p ) (p-1)!\equiv 1 * 1^{p-3 \over 2}*(p-1) \equiv -1 \pmod p ,即 ( p 1 ) ! 1 ( m o d p ) (p-1)! \equiv -1 \pmod p ,充分性得证。
必要性:若 p p 为合数,且 ( p 1 ) ! 1 ( m o d p ) (p-1)! \equiv -1 \pmod p 成立,取 p p 的一个素因子 r r ,则 1 < r < p 1<r<p ,于是 r ( p 1 ) ! r | (p-1)! 。又因为 ( p 1 ) ! 1 ( m o d p ) (p-1)! \equiv -1 \pmod p ,得(这个转化时是同余的基本性质,自己手动证明): ( p 1 ) ! 1 ( m o d r ) (p-1)! \equiv -1 \pmod r ,又得出: 0 1 ( m o d r ) 0 \equiv -1 \pmod r ,前后矛盾,故必要性得证。

欧拉定理

欧拉定理:当 a a p p 互质时,有 a ϕ ( p ) 1 ( m o d p ) a^{ \phi(p) } \equiv 1 \pmod p
同样可以用来求逆元,只要把式子转化为: a ϕ ( p ) 1 a 1 ( m o d p ) a^{ \phi(p) - 1} \equiv a^{-1} \pmod p
不难看出,费马小定理是欧拉定理的特殊情况。

定理证明:这又要用到完全剩余系的知识,这个我在上一篇博客已经讲到,现在再贴出来复习吧。

完全剩余系
如果 a a b b 关于模 m m 同余,那么 a a b b 同属一类,否则不同属于一类,这样可得 m m 个类,即
M i = { i + k m k Z } , i = 0 , 1 , 2 ,   , m 1 M_i=\{i + k*m | k \in Z \} , i = 0,1,2,\cdots ,m-1
它们称为模 m m 的剩余类。
从每个剩余类中各取一个数作为代表,这样得到的 m m 个数称为模 m m 的一个完全剩余系,简称完系。
完全剩余系还有一个性质,就是如果 G C D ( n , m ) = 1 GCD(n,m)=1 时,那么在 a 1 , a 2 ,   , a m a_1,a_2,\cdots,a_m 是模 m m 的一个完全剩余系时,那么 n a 1 + k , n a 2 + k ,   , n a m + k n * a_1 + k,n * a_2+k,\cdots ,n * a_m + k ,模 m m 互不同余,也是一个完全剩余系。
证明:反证法,若 n a i + k n a j + k ( m o d m ) n * a_i + k \equiv n * a_j + k \pmod{m} ,又因为 G C D ( n , m ) = 1 GCD(n,m)=1 ,不难得出 a i a j ( m o d m ) a_i \equiv a_j \pmod{m} ,与定义不成立,矛盾,故这个性质成立。

在模 n n 的完全剩余系中有 ϕ ( n ) \phi(n) 个类,这类数与 n n 互质。在这类数中各取一个数,就得到 ϕ ( n ) \phi(n) 个数,称这 ϕ ( n ) \phi(n) 个数为模 n n 的一个缩系。
如果 a a b b n n 互质,那么 a b a*b 也与 n n 互质。
因而设 b 1 , b 2 ,   , b ϕ ( n ) b_1,b_2,\cdots,b_{\phi(n)} 为一个缩系,且 a a n n 互质,所以 a b 1 , a b 2 ,   , a b ϕ ( n ) a*b_1,a*b_2,\cdots,a*b_{\phi(n)} 均与 n n 互质,并且模 n n 互不同余,所以这些数也为模 n n 的一个缩系,所涉及到的类相同,不难得出,这两组数之间一定存在着一一对应的关系。
因为两组数同为缩系,我们有 ( a b 1 ) ( a b 2 ) ( a b ϕ ( n ) ) b 1 b 2 b ϕ ( n ) ( m o d n ) (a*b_1)*(a*b_2)*\cdots*(a*b_{\phi(n)}) \equiv b_1*b_2*\cdots*b_{\phi(n)} \pmod n ,约去与 n n 互质的 b 1 b 2 b ϕ ( n ) b_1*b_2*\cdots*b_{\phi(n)} a ϕ ( n ) 1 ( m o d n ) a^{ \phi(n) } \equiv 1 \pmod n ,欧拉定理得证。

扩展欧拉定理

扩展欧拉定理
在模 n n 的情况下, a b a^b 的解可表示为 a b { a b % ϕ ( m ) ( m o d m ) , G C D ( b , m ) = 1 ; a b ( m o d m ) , G C D ( b , m ) 1 , b < ϕ ( m ) ; a ( b % ϕ ( m ) ) + ϕ ( m ) ( m o d m ) , G C D ( b , m ) 1 , b ϕ ( m ) a^b \equiv \begin{cases} a^{b \% \phi(m)}&\pmod m,&GCD(b,m) =1 ;\\ a^b&\pmod m, & GCD(b,m) 不等于1,b \lt \phi(m);\\ a^{(b \% \phi(m)) + \phi(m)}&\pmod m,&GCD(b,m) 不等于1,b \ge \phi(m) \end{cases}
定理证明:我们只要证明第三个式子的正确性即可。
不妨考虑一个质数为 p p m m 内的质因子 p p 的个数为 k k k k 不可以一直为0),则 m m 可表示为 m = p k s m=p^k*s
不难看出 G C D ( s , p ) = 1 GCD(s,p)=1 ,根据欧拉定理,不难看出 p ϕ ( s ) 1 ( m o d s ) p^{\phi(s)} \equiv 1 \pmod s ,并且根据欧拉函数的性质(如下),有 ϕ ( s ) ϕ ( m ) \phi(s)|\phi(m)

对于一个质数 p p ,有 ϕ ( p a ) = ( p 1 ) p a 1 \phi(p^{a})=(p-1)*p^{a-1}
对于任意一个合数若按照下面分解成质数幂乘积表达式 n = p 1 a 1 p 2 a 2 p m a m n=p_1^{a_1}*p_2^{a_2}* \cdots * p_m^{a_m} ,则可得出 ϕ ( n ) = n ( 1 1 p 1 ) ( 1 1 p 2 ) ( 1 1 p m ) \phi(n) = n * (1-{ 1 \over p_1 }) * (1-{ 1 \over p_2 }) * \cdots * (1-{ 1 \over p_m })

所以 p ϕ ( m ) 1 ( m o d s ) p^{\phi(m)} \equiv 1 \pmod s
根据同余的性质,两边以及模数同时乘以 p k p^k ,可得 p k + ϕ ( m ) p k ( m o d m ) p^{k+\phi(m)} \equiv p^k \pmod{m}
两边再乘上 p b k p^{b-k} (这回不包括模数),其中 b > ϕ ( m ) b > \phi(m) ,得 p b + ϕ ( m ) p b ( m o d m ) p^{b+\phi(m)} \equiv p^b \pmod{m}

加上一个定理:对于 p k n p^k|n ,总有 k ϕ ( n ) k\le \phi(n) (可以先研究质数幂,用数学归纳法验证)

因此 k ϕ ( m ) k \le \phi(m) ,上面的式子可表示为 p b % ϕ ( m ) + ϕ ( m ) p b ( m o d m ) p^{b \%\phi(m) +\phi(m)} \equiv p^b \pmod{m} ,假设 q = b ϕ ( m ) q=\lfloor {b \over \phi(m)} \rfloor ,这个式子两边乘以 p q ϕ ( m ) p^{q*\phi(m)} ,可得 p b + ϕ ( m ) p b + q ϕ ( m ) ( m o d m ) p^{b +\phi(m)} \equiv p^{b+q*\phi(m)} \pmod{m} ,右边可约去 p q ϕ ( m ) p^{q*\phi(m)} ,得出一开始的那个等式 p b + ϕ ( m ) p b ( m o d m ) p^{b+\phi(m)} \equiv p^b \pmod{m} ,所以 p b % ϕ ( m ) + ϕ ( m ) p b ( m o d m ) p^{b \%\phi(m) +\phi(m)} \equiv p^b \pmod{m} 成立。
对于一个质数的幂,重复上面的定义,将上面的结果根据同余的一条性质进行乘幂,得: ( p k ) b ( p k ) ( ϕ ( m ) + b ) ( p k ) ( ϕ ( m ) + b % ϕ ( m ) ) ( m o d m ) (p^k)^b \equiv (p^{k})^{(\phi(m)+b)} \equiv (p^{k})^{(\phi(m)+b \% \phi(m) )}\pmod m 其中 b ϕ ( m ) b \ge \phi(m) b Z b \in Z
a = Π p i k i a=\Pi p_i^{k_i} ,因为每一个 p i k i p_i^{k_i} 满足上面的式子,所以这些同余式乘在一起,可得 a ( b % ϕ ( m ) ) + ϕ ( m ) a b ( m o d m ) a^{(b \% \phi(m)) + \phi(m)} \equiv a^b \pmod m 所以拓展欧拉定理得证。

【模板】欧拉定理https://www.luogu.org/problem/P5091其它两个定理的模板以后贴吧 )。
非常裸的模板题。
在快读时取模,无需高精。

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
ll phi;
inline ll gcd( ll a , ll b ) {
	return b == 0 ? a : gcd( b , a % b );
}
inline void read1( ll & res ) {
	res = 0;
	ll pd = 1;
	char a = getchar();
	while ( a < '0' || a > '9' ) {
		if ( a == '-' ) {
			pd = -pd;
		}
		a = getchar();
	}
	while ( a >= '0' && a <= '9' ) {
		res = ( res << 1 ) + ( res << 3 ) + ( a - '0' );
		res %= phi;
		a = getchar();
	}
	res *= pd;
	return;
}
inline void read2( ll & res ) {
	res = 0;
	ll pd = 1;
	char a = getchar();
	while ( a < '0' || a > '9' ) {
		if ( a == '-' ) {
			pd = -pd;
		}
		a = getchar();
	}
	bool flag = false;
	while ( a >= '0' && a <= '9' ) {
		res = ( res << 1 ) + ( res << 3 ) + ( a - '0' );
		if ( res > phi ) {
			flag = true;
			res %= phi;
		}
		a = getchar();
	}
	if (flag) {
		res += phi;
	}
	res *= pd;
	return;
}
inline ll mul( ll a , ll b , ll m ) {
	ll res = 1;
	while (b) {
		if ( b & 1 ) {
			res = ( res * a ) % m;
		}
		a = ( a * a ) % m;
		b >>= 1;
	}
	return res;
}
int main () {
	ll a , m , b;
	scanf("%lld%lld",&a,&m);
	ll tem = m;
	phi = m;
	for ( int i = 2 ; i <= tem ; ++i ) {
		if ( tem % i == 0 ) {
			while ( tem % i == 0 ) {
				tem /= i;
			}
			phi = phi - phi / i;
		}
	}
	if ( gcd( a , m ) == 1 ) {
		read1(b);
	} else {
		read2(b);
	}
	printf("%lld",mul( a , b , m ));
	return 0;
}

本文参考资料:《初等数论的知识与问题》(单壿 著)
《数学奥林匹克命题人讲座 初等数论》

猜你喜欢

转载自blog.csdn.net/ha_ing/article/details/100130396