1. 程式人生 > >【專題】歐幾里得演算法、擴充套件歐幾里得、乘法逆元

【專題】歐幾里得演算法、擴充套件歐幾里得、乘法逆元

1.歐幾里得

  • 用途
    最大公因數和最小公倍數
  • 定理:
     gcd(a,b)=gcd(b,a%b)
     

  • 證明:
    我們令c=gcd(a,b)
    a=nc , b=mc
    a%b=akb=nmkc,可知,c也是a%b的因子,

    現在只需證明c是b和a%b的最大因子,用反證法:
    假設gcd(b,a%b)=d>c
    b=n1da%b=m1d
    可推出a=m1d+k1b=m1d+k1n1d
    從而推出gcd(a,b)=d
    矛盾
    證明完畢

  • 程式碼

int gcd(int a,int b)
{
   return b==0 ? a : gcd(b,a%b
); }

2.擴充套件歐幾里得演算法

  • 擴充套件歐幾里得定理
    對於不完全為0的非負整數a,b,gcd(a, b)表示a, b的最大公約數,必定存在整數對x,y,滿足ax+by==gcd(a,b)

  • 用途
    求出整數x,y使得 ax+by=gcd(a,b)

  • 應用
    擴充套件歐幾里得主要有三個應用:

    • 求解不定方程
    • 求解模的逆元
    • 求解同餘方程
  • 證明
    由於gcdab=gcdba%b
    所以bx1+(a%b)y1=gcd(a,b)
    a%b=a(a/b)b
    所以gcd(a,b)=bx1+(a(a/b)b)y1
    =bx1+ay1(a/b)by1
    =
    ay1+b(x1a/by1)

    對於我們所求的x,y使得ax+by=gcd(a,b)
    則有 x=y1
    y=x1a/by1
  • 程式碼
int Exgcd(int a,int b,int &x,int &y)
{
      if(b==0)
      {
            x=1;
            y=0;
            return a;
      }
      int ans=Exgcd(b,a%b,x,y);
      int temp=x;
      x=y;
      y-temp-a/b*y;
      return ans;
}

3.乘法逆元

  • 定義:
    bb11(modc),那麼稱b1為b模c的乘法逆元。

  • 定理:
    ab(modc)=ab1(modc),條件是b1存在(或b與c互質)。

  • 用途
    乘法逆元可以用來求解部分除法的取模問題(分母是一個整數,並且與被取模數互質)

知道了乘法逆元的用途之後關鍵是怎麼求出乘法逆元b1的問題,由定義bb11(modc)可以設:
bb1=kc+1
=>bb1kc=1=gcd(b,c),(因為b,c)
所以問題就變成了用擴充套件歐幾里得的求b1k

相關推薦

演算法複習——擴充套件演算法擴充套件,整除)

①歐幾里得演算法 就是求gcd的有趣的輾轉相除法,不再贅述啦0v0 程式碼: int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } ②擴充套件歐幾里得演算法 需要解決這樣的問題:兩個非0整數a,b

演算法學習(一)——演算法&擴充套件演算法

最大公約數/歐幾里德演算法(gcd) 歐幾里德演算法又稱輾轉相除法,證明可以度娘。 個人簡單腦部就是a和b兩個數的模還是a和b的最大公約數 int型別  int gcd(int a, int b) {return a%b==0?b:gcd(b,a%b);} long l

演算法擴充套件演算法的簡單例子

歐幾里得演算法: #include <cstdio> #include <cstdlib> /* * 挑戰。。。p113 */ struct point{ //格點

LG 的數學計劃 ---- 第三步 演算法擴充套件

於是,我們在完成神奇的前兩步之後,來到了這個神奇的地方——歐幾里得演算法和擴充套件歐幾里得演算法。 那麼,這是用來幹什麼的演算法呢? 算最大公約數(GCD)~~~ 好吧,考慮到有一些同學可能還不知道這是怎樣一種神奇的東西,那麼我就把這個東西的定義放到下面來

gcd演算法/extgcd擴充套件演算法以及在解不定方程中的應用

這個應該是我在noip前就應該會的東西 ,但是當時也許只是記下了程式碼吧 ,現在有諸多的不理解。後來藉著書和幾篇部落格弄懂了並小證了一下,鑑於網上有些部落格關於這個的寫的真的不好看,所以自己來總結一下,順帶以後也能看。 順帶一提,gcd(a,b)表示a,b的最

專題演算法擴充套件乘法

1.歐幾里得 用途 最大公因數和最小公倍數 定理:  gcd(a,b)=gcd(b,a%b)   證明: 我們令c=gcd(a,b) 令a=n∗c , b=m∗c a%b=a−k

未完成除法取模擴充套件演算法

1.+,-,*都可以直接取模,但是除法不可以(模素數相當於換了數域,因為數域變成了有限域,有限域上沒有除法,要換成乘以逆元)。 2.除法取模要變成乘它的逆元。 a * x MOD m == 1則稱X為A關於模m的乘法逆元,其中a和m必須互素。 3.當m為素數時可以使用

乘法詳解費馬小定理+擴充套件演算法

乘法逆元 何為乘法逆元? 對於兩個數a,pa,p若gcd(a,p)=1gcd(a,p)=1則一定存在另一個數bb,使得ab≡1(modp)ab≡1(modp),並稱此時的bb為aa關於11模pp的乘法逆元。我們記此時的bb為inv(a)inv(a)或a−1a

擴充套件演算法(求乘法

eg:求5關於模14的乘法逆元 15 = 5*2+1 5 = 4*1+1 說明5與14互素,存在5關於14的乘法逆元 1 = 5-4 = 5-(14-5*2)= 5*3-14 因此5關於模14的乘法逆元為3  a存在模b的乘法逆元的充要條件是gcd(a,b)= 1 互質

各種密碼學演算法的GUI程式設計實現(DESAESPresent擴充套件演算法素性檢測)

encryption-algorithm 各種密碼學演算法的 C# GUI程式設計實現,包含: DES AES Present 擴充套件歐幾里得演算法 素性檢測 最終的結果 DES加密 DES解密

乘法擴充套件演算法二元一次方程a的n次方取餘

知識點:乘法逆元,逆元的求法,二元一次方程求通解,a的n次方求餘數 一,乘法逆元 乘法逆元的概念類似於倒數(ax=1,a−1=x),不過是在取餘數的情況下的倒數。 如果(a×x)%p=1,則稱x是a模p的逆元。另一種記法:ax=1(modp),即等

擴充套件演算法乘法 最小正整數解 直線上的整數點)

參考資料: 本文證明過程來自百度百科和劉汝佳的演算法入門經典。 擴充套件歐幾里得演算法介紹: 前置知識:歐幾里得演算法(其實就是輾轉相除法,用於計算兩個整數a,b的最大公約數。) 歐幾里得演算法: 在開始之前,我們先說明幾個定理: gcd(a,b)=gcd(b,a

演算法及其擴充套件學習筆記

歐幾里得演算法 百度一下 人物介紹 在歐幾里得著的《幾何原本》裡面,有用線段的劃分來講解這個數學方法的,這裡我們從代數而不是幾何上來講,並且側重於演算法OI競賽。 歐幾里得演算法(gcdgcdgcd),又稱輾轉相除法,可以用來快速計算兩個整數的最大公

擴充套件(Extended Euclid)演算法求最大公約數和乘法

密碼學課本里面使用到的一個十分簡單的演算法,老師佈置的作業,就寫了一下...程式碼挺腦殘的,只要知道演算法的步驟,很好實現。 程式碼: #include<iostream> using namespace std; int a[3][3]; int coun

演算法(求最大公因子)及擴充套件(求乘法

一、歐幾里得演算法歐幾里得演算法又稱輾轉相除法,是指用於計算兩個正整數a,b的最大公約數。gcd(a,b)=gcd(b,a mod b)。演算法描述:1. 輸入:兩個非負整數a,b,且a≥b。2. 輸出

51nod 1256 乘法擴充套件演算法

思路1:把k*M%N=1可以寫成一個不定方程,(k*M)%N=(N*x+1)%N,那麼就是求k*M-N*x=1使得k最小,不定方程利用擴充套件歐幾里得演算法 --------------------------------------------------------

51Nod 1256 乘法 擴充套件

1256 乘法逆元 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關注 給出2個數M和N(M < N),且M與N互質,找出一個數K滿足0 < K < N且K * M % N = 1,如果有多個滿足條件的,輸出最小的。

(拓展)51NOD 1256 乘法

給出2個數M和N(M < N),且M與N互質,找出一個數K滿足0 < K < N且K * M % N = 1,如果有多個滿足條件的,輸出最小的。   輸入 輸入2個數M, N中間用空格分

ZOJ ~ 3609 ~ Modular Inverse (擴充套件乘法

題意 求a*x ≡ 1(mod m),求最小的正整數 x ,如果沒有解輸出 “Not Exist”。 思路 求乘法逆元。a*x ≡ 1(mod m)轉化為 ,求最小的正!整數 x 。 #

51 Nod 1256 乘法(數論:拓展

基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題  收藏  關注 給出2個數M和N(M < N),且M與N互質,找出一個數K滿足0 < K < N且K * M % N = 1,如果有多個滿足條件的,輸出最小的。 Inp