費馬小定理(介紹+證明+逆元代碼實現)

目錄

一、背景知識回顧

1、什麼是質數?

2、≡的意思?

3、mod的意思?

4、數論中的倒數(也成爲逆元)

二、什麼是費馬小定理?

三、費馬小定理歷史

四、費馬小定理證明

五、應用

六、求逆元的代碼實現


一、背景知識回顧

1、什麼是質數?

質數(prime number)又稱素數,有無限個。

質數定義爲在大於1的自然數中,除了1和它本身以外不再有其他因數

2、≡的意思?

≡   的意思是左右兩邊的數對p求模結果相同。

3、mod的意思?

指求模運算。

4、數論中的倒數(也成爲逆元)

我們知道:如果a*x = 1,那麼x是a的倒數,x = 1/a,但是a如果不是1,那麼x就是小數。

那麼在數論中,大部分情況下都有求餘,所以現在問題變了

現在有:a*x  ≡ 1 (mod p)

那麼x一定等於1/a嗎?

不一定

那麼在這個時候,我們就把x看成a的倒數,只不過加了一個求餘條件,所以x叫做a關於p的逆元。

二、什麼是費馬小定理?

       費馬小定理是數論中的一個定理。其內容爲假如a是一個整數,p是一個質數的話,那麼:

  ap = a(mod p)

  假如a不是p的倍數的話,那麼這個定理也可以寫成:

  ap − 1 = 1(mod p)

  這個書寫方式更加常用些。

三、費馬小定理歷史

  皮埃爾·德·費馬於1636年發現了這個定理,在一封1640年10月18日的信中他第一次使用了上面的書寫方式。在他的信中費馬還提出a是一個質數的要求。這個要求實際上不存在。

四、費馬小定理證明

 任意取一個質數,比如13。考慮從1到12的一系列整數1,2,3,4,5,6,7,8,9,10,11,12,給這些數都乘上一個與13互質的數,比如3,得到3,6,9,12,15,18,21,24,27,30,33,36。對於模13來說,這些數同餘於3,6,9,12,2,5,8,11,1,4,7,10。這些餘數實際上就是原來的1,2,3,4,5,6,7,8,9,10,11,12,只是順序不同而已。

  把1,2,3,„,12統統乘起來,乘積就是12的階乘12!。把3,6,9,„,36也統統乘起來,並且提出公因子3,乘積就是312×12!。對於模13來說,這兩個乘積都同餘於1,2,3,„,12系列,儘管順序不是一一對應,即312×12!≡12!mod 13。兩邊同時除以12!得312≡1 mod 13。如果用p代替13,用x代替3,就得到費馬小定理。

證明來自:《數論妙趣——數學女王的盛情款待》第六章 開門咒

五、應用

費馬小定理可以快速求得x關於p的逆元(參看上面逆元的概念)。

前提當然得是x與p互質纔有逆元。

即:x*x^p-2  ≡ 1 (mod p)

所以x^p-2就是x關於p的逆元。

六、求逆元的代碼實現

這裏使用了快速冪算法來求x^p-2。

#include<iostream>
#define ll long long
using namespace std;
ll quickpow(ll a, ll b, ll p){
    ll temp = 1;
    while(b){
        if(b & 1) temp = (temp * a) % p;
        a = (a * a) % p;
        b >>= 1;
    }
    return temp;
}
int main()
{
	ll a, p;
	cin>>a>>p;
	cout<<quickpow(a, p-2, p)<<endl;
	return 0;
}

參考博客:

1、逆元的概念與逆元的計算:https://www.cnblogs.com/linyujun/p/5194184.html

2、費馬小定理證明:https://www.cnblogs.com/flipped/p/5218037.html

3、快速冪算法:https://blog.csdn.net/weixin_42151279/article/details/81057137

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章