Extended Euclidean algorithm(扩展欧几里得算法Matlab实现)
生活随笔
收集整理的這篇文章主要介紹了
Extended Euclidean algorithm(扩展欧几里得算法Matlab实现)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 一、解析
- 二、思路
- 1、Ini_XY迭代初值
- 2、Ini_XY迭代矩陣
- 3、流程
- 三、效果如下
- 四、代碼
- 1、Mian.m
- 2、GCD.m
一、解析
Main.m
矩陣A為一個(gè)n·2的矩陣,每一行存儲(chǔ)一對(duì)待求解的數(shù)據(jù)
Ini_XY數(shù)組為x,y的初始迭代值
GCD.m
形參:待求解數(shù)據(jù)矩陣,x,y的初始迭代值
返回值:x,y的迭代值,除數(shù)矩陣
二、思路
1、Ini_XY迭代初值
2、Ini_XY迭代矩陣
3、流程
由輾轉(zhuǎn)相除法獲取{q1,q2,…,qn}
Qi=[0 1;1 -qi]
若兩數(shù)互質(zhì)
則有Ini_XY(n+1)迭代初值=[1 0]
迭代如下:
Ini_XY(n)=Qn*Ini_XY(n+1)
Ini_XY(n-1)=Q(n-1)Ini_XY(n)
…
Ini_XY(1)=Q1Ini_XY(2)
三、效果如下
四、代碼
1、Mian.m
A=[42 30;1759 550;334 111]; Ini_XY=[1 0]; for i=1:3disp("========================================");disp("第"+i+"次輸入:");[X_Y,gcd]=GCD(A(i,:),Ini_XY);disp("GCD("+A(i,1)+","+A(i,2)+")="+gcd(2));if(gcd(2)==1)disp(A(i,1)+","+A(i,2)+"互質(zhì)");disp("于是有");disp("GCD("+A(i,1)+","+A(i,2)+")="+A(i,1)+"*x+"+A(i,2)+"*y");disp("解得:");disp("GCD("+A(i,1)+","+A(i,2)+")="+A(i,1)+"*"+X_Y(1)+"+"+A(i,2)+"*"+X_Y(2));disp("x="+X_Y(1)+","+"y="+X_Y(2));end end2、GCD.m
function [X_Y,gcd] = GCD(A,Initial_XY) %gcd(a,b)=a*x+b*y %X_Y=[x y] %gcd:存儲(chǔ)除數(shù)的數(shù)組 a=A(1); b=A(2); gcd=[b]; Q_Array=[]; while(b)c=mod(a,b);Q_Array=[(a-c)/b Q_Array];a=b;b=c;gcd=[b gcd]; end %x,y迭代初值 X_Y=Initial_XY'; for i=Q_ArrayQ=[0 1;1 -1*i];X_Y=Q*X_Y; end X_Y=X_Y'; end總結(jié)
以上是生活随笔為你收集整理的Extended Euclidean algorithm(扩展欧几里得算法Matlab实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Leetcode题库 598.N叉树的前
- 下一篇: Leetcode题库 144.二叉树的前