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

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

费马小定理

费马小定理:当 p p p为质数时,有 a p ≡ a ( m o d p ) a^{p} \equiv a \pmod p apa(modp),如果再加上 a a a p p p互质这一条件,得 a p − 1 ≡ 1 ( m o d p ) a^{p - 1} \equiv 1 \pmod p ap11(modp),这个定理可用来求逆元,只要将式子转化为 a p − 2 ≡ a − 1 ( m o d p ) a^{p - 2} \equiv a^{-1} \pmod p ap2a1(modp),这个定理不能用来准确判定质数,详情请搜索“伪质数”。
定理证明:由二项式定理,得: ( 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 (x+y)p=xp+Cp1xp1y+Cp2xp2y2++yp,当 p p p为质数时,不难得出 p ∣ C p k , k = 1 , 2 , ⋅ ⋅ ⋅ , p − 1 p | C^k_p,k = 1,2,\cdot \cdot \cdot,p - 1 pCpk,k=1,2,,p1,从而 ( x + y ) p ≡ x p + y p ( m o d p ) (x+y)^p \equiv x^p + y^p \pmod p (x+y)pxp+yp(modp),此时,令 x = y = 1 x=y=1 x=y=1,得 2 p ≡ 2 ( m o d p ) 2^p \equiv 2 \pmod p 2p2(modp),令 x = 2 , y = 1 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 3p(2+1)p2p+1p2+13(modp),即 3 p ≡ 3 ( m o d p ) 3^p \equiv 3 \pmod p 3p3(modp),以此类推,对于所有 a = 0 , 1 , ⋅ ⋅ ⋅ , p − 1 a=0,1,\cdot \cdot \cdot ,p-1 a=0,1,,p1(太大了就会直接被模),都有 a p ≡ a ( m o d p ) a^{p} \equiv a \pmod p apa(modp)

威尔逊定理

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

欧拉定理

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

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

完全剩余系
如果 a a a b b b关于模 m m m同余,那么 a a a b b b同属一类,否则不同属于一类,这样可得 m m m个类,即
M i = { i + k ∗ m ∣ k ∈ Z } , i = 0 , 1 , 2 , ⋯ &ThinSpace; , m − 1 M_i=\{i + k*m | k \in Z \} , i = 0,1,2,\cdots ,m-1 Mi={i+kmkZ},i=0,1,2,,m1
它们称为模 m m m的剩余类。
从每个剩余类中各取一个数作为代表,这样得到的 m m m个数称为模 m m m的一个完全剩余系,简称完系。
完全剩余系还有一个性质,就是如果 G C D ( n , m ) = 1 GCD(n,m)=1 GCD(n,m)=1时,那么在 a 1 , a 2 , ⋯ &ThinSpace; , a m a_1,a_2,\cdots,a_m a1,a2,,am是模 m m m的一个完全剩余系时,那么 n ∗ a 1 + k , n ∗ a 2 + k , ⋯ &ThinSpace; , n ∗ a m + k n * a_1 + k,n * a_2+k,\cdots ,n * a_m + k na1+k,na2+k,,nam+k,模 m 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} nai+knaj+k(modm),又因为 G C D ( n , m ) = 1 GCD(n,m)=1 GCD(n,m)=1,不难得出 a i ≡ a j ( m o d m ) a_i \equiv a_j \pmod{m} aiaj(modm),与定义不成立,矛盾,故这个性质成立。

在模 n n n的完全剩余系中有 ϕ ( n ) \phi(n) ϕ(n)个类,这类数与 n n n互质。在这类数中各取一个数,就得到 ϕ ( n ) \phi(n) ϕ(n)个数,称这 ϕ ( n ) \phi(n) ϕ(n)个数为模 n n n的一个缩系。
如果 a a a b b b n n n互质,那么 a ∗ b a*b ab也与 n n n互质。
因而设 b 1 , b 2 , ⋯ &ThinSpace; , b ϕ ( n ) b_1,b_2,\cdots,b_{\phi(n)} b1,b2,,bϕ(n)为一个缩系,且 a a a n n n互质,所以 a ∗ b 1 , a ∗ b 2 , ⋯ &ThinSpace; , a ∗ b ϕ ( n ) a*b_1,a*b_2,\cdots,a*b_{\phi(n)} ab1,ab2,,abϕ(n)均与 n n 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 (ab1)(ab2)(abϕ(n))b1b2bϕ(n)(modn),约去与 n n n互质的 b 1 ∗ b 2 ∗ ⋯ ∗ b ϕ ( n ) b_1*b_2*\cdots*b_{\phi(n)} b1b2bϕ(n) a ϕ ( n ) ≡ 1 ( m o d n ) a^{ \phi(n) } \equiv 1 \pmod n aϕ(n)1(modn),欧拉定理得证。

扩展欧拉定理

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

对于一个质数 p p p,有 ϕ ( p a ) = ( p − 1 ) ∗ p a − 1 \phi(p^{a})=(p-1)*p^{a-1} ϕ(pa)=(p1)pa1
对于任意一个合数若按照下面分解成质数幂乘积表达式 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=p1a1p2a2pmam,则可得出 ϕ ( 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 }) ϕ(n)=n(1p11)(1p21)(1pm1)

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

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

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

【模板】欧拉定理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;
}

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值