輾轉相除法、相減法求兩自然數最大公約數和最小公倍數
阿新 • • 發佈:2019-01-27
l 輾轉相除法
演算法描述:
輾轉相除法是求兩個正整數的最大公約數的一種演算法.
有兩整數a和b:
① a%b得餘數c
② 若c=0,則b即為兩數的最大公約數
③ 若c≠0,則a=b,b=c,再回去執行①
例如求27和15的最大公約數過程為:
27÷15餘1215÷12餘312÷3餘0因此,3即為最大公約數
資料流程圖:
演算法的數學證明:
證明輾轉相除法的確可以求得最大公約數,只需證明gcd(a,b)=gcd(b,a%b).
證明:定義a=k*b+r ,即k=a/b , r=a%b
假設一個數d為a,b的一個公約數,表示為d|a且d|b,意為a能被d整除同時b也能被b整除.-->
兩個數的最小公倍數等於他們的乘積除以最大公約數.
C#程式碼實現:
迴圈:
Console.WriteLine ("輸入兩個正整數(輸入一個敲下回車): "); int num1 = int.Parse (Console.ReadLine ()); int num2 = int.Parse (Console.ReadLine ()); int temp = num1*num2,r; do{ r = num1 % num2; num1 = num2; num2 = r; }while(r>0); Console.WriteLine ("最大公約數是{0} ",num1); Console.WriteLine ("最小公倍數是{0} ",temp/num1);
遞迴:
public static int gcd (int a, int b)
{
return (b==0?a:gcd(b,a%b));
}
l 輾轉相減法
輾轉相減法與輾轉相減法相似
演算法描述
有兩整數a和b:
①若a>b,則a=a-b
②若a<b,則b=b-a
③若a=b,則a(或b)即為兩數的最大公約數
④若a≠b,則再回去執行①
例如求27和15的最大公約數過程為:
27-15=12( 15>12 ) 15-12=3( 12>3 )
12-3=9( 9>3 ) 9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3即為最大公約數
程式碼實現
int temp = num1*num2;
while(num1!=num2)
{
if (num1 > num2)
num1 -= num2;
else
num2 -= num1;
}
Console.WriteLine ("最大公約數是{0} ",num1);
Console.WriteLine ("最小公倍數是{0} ",temp/num1);