輾轉相除法求最大公約數

輾轉相除法百度百科解釋:

       兩個整數的最大公約數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理:兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如,252和105的最大公約數是21(252 = 21 × 12;105 = 21 × 5);因爲252 − 105 = 147,所以147和105的最大公約數也是21。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至其中一個變成零。這時,所剩下的還沒有變成零的數就是兩數的最大公約數

      輾轉相除法有很多應用,它甚至可以用來生成全世界不同文化中的傳統音樂節奏。在現代密碼學方面,它是RSA算法(一種在電子商務中廣泛使用的公鑰加密算法)的重要部分。它還被用來解丟番圖方程,尋找滿足中國剩餘定理的數,或者求有限域倒數。輾轉相除法還可以用來構造連分數,在施圖姆定理和一些整數分解算法中也有應用。輾轉相除法是現代數論中的基本工具。

  輾轉相除法處理大數時非常高效,它需要的步驟不會超過較小數的位數(十進制下)的五倍。加百利·拉梅(Gabriel Lamé)於1844年證明了這點,開創了計算複雜性理論

public class Gongyueshu
{
//輾轉相除法
/*比如35、30,30和35的最大公約數爲5。
因爲5=35-30,所以5與30的最大公約數爲5,一相減,數的範圍就縮小了,
不斷做這樣的操作,直到其中的某一個數爲0,那麼剩下的那個不等於0的數就是兩個數的最大公約數*/
	public static void main(String args[])
	{
		i=30;j=35;
		if(i==j)
		{
			System.out.println("最大公約數爲:"+i);
			return;
		}
		else
		{
			while(i==0||j==0)
			{
				if(i>j)
				{
					i-=j;
				}
				else
				{
					j-=i;
				}
				int result=i>j?i:j;
				System.out.println("兩個數的最大公約數爲:"+result);
				return;
			}
		}
	}
} 


發佈了36 篇原創文章 · 獲贊 6 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章