歐幾里得演算法
費馬小定理
當a,p都是是質數時,a^(p-1)=1(mod p)
證明:
舉個例子 a=2,p=5;
1,2,3,4 集合(1) {1,2,3,4...,(p-1)}
2,4,6,8 => %5 => 2,4,1,3 集合(2) {1a%p,2a%p,3a%p,4a%p...,(p-1)a%p}
我們發現{1,2,3,4}和{2,4,1,3}只是位置不同,成積相同
怎麼個一定乘積相同法?
反證法:
首先(1)一定不會有相同,(2)的證法如下
ai=aj (mod P) => a(i-j)=0 (mod p) => p|a(i-j) 這可能嗎?p是質數
證畢
裴屬定理
證明:c|ax,c|by,所以c|ax+by,證畢:)
求逆元(老重要了!!!)
- 擴充套件歐幾里得演算法
點選檢視程式碼
void Exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) x = 1, y = 0;
else Exgcd(b, a % b, y, x), y -= a / b * x;
}
int main() {
ll x, y;
Exgcd (a, p, x, y);
x = (x % p + p) % p;
printf ("%d\n", x); //x是a在mod p下的逆元
}
- 線性方法
求i的逆元
點選檢視程式碼
inv[1] = 1;
for(int i = 1; i < p; ++ i)
inv[i] = (p - p / i) * inv[p % i] % p;//這裡有個問題困擾了我很久,為什麼(p-p/i)=-(p/i) ? 因為 -(p/i)%p=p-(p/i) 不知道的去查
對與中國剩餘定理