「学习笔记」费马小定理

费马小定理

概念

  1. 定理
    pp 为质数, aa 为整数且 (a,p)=1(a,p)=1, 有 ap11(modp)a^{p-1}\equiv1\pmod p.

  2. 证明
    构造质数 p 的完全剩余系P={1,2,3,p1}.P=\{1,2,3,\cdots p-1\}.
    同时构造另一完全剩余系A={a,2a,2a,(p1)a}.A=\{a,2a,2a,\cdots (p-1)a\}.
    由完全剩余系的性质,可得1×2×3××(p1)a2a3a(p1)a(modp).1\times2\times3\times\cdots\times(p-1)≡a\cdot2a\cdot3a\cdot\cdots\cdot(p-1)a\pmod p.
    (p1)!(p1)!ap1(modp).(p-1)!≡(p-1)!\cdot a^{p-1}\pmod p.
    pp为质数,可知 p(p1)!+1p\mid(p-1)!+1
    ((p1)!,p)=0.((p-1)!,p)=0.
    同余式两边可同时约去 (p1)!(p-1)! ,得
    ap11(modp).a^{p-1}≡1\pmod p.
    Justified.

应用

求乘法逆元:bbaa 在模 pp 意义下的乘法逆元,可表示为 abap1.ab≡a^{p-1}.
(a,p)=1(a,p)=1 时,同余式两边可同时乘上 1a\frac{1}{a} ,故 bap2.b≡a^{p-2}.
(a,p)1(a,p)\not=1 时,则该同余式无解。

code:

//费马小定理求乘法逆元 
#include<bits/stdc++.h>
using namespace std;

long long n , p;
long long quick_power(long long x , long long y) { 
	long long res=1 , temp=x;
	
	for (long long i=y; i; temp=temp*temp%p , i>>=1) {
		if (i%2==1) {
			res=res*temp%p;
		}
	}
	
	return res;
}

const int maxn=1e6+5;
long long inv[maxn];
int main() {
	scanf("%lld %lld" , &n , &p);
	
	for (int i=1; i<=n; i++) {
		inv[i]=quick_power(i , p-2);
		//printf("%lld\n" , inv[i]);
	}
	
	return 0;
}
posted @ 2020-07-17 21:52  willbe233  阅读(149)  评论(0)    收藏  举报