1. 程式人生 > >輾轉相除法(歐幾里得演算法)java實現

輾轉相除法(歐幾里得演算法)java實現

輾轉相除法,又叫歐幾里得演算法,是用以計算兩個非負整數的最大公約數,在數學課本上是見過了,程式又是怎樣實現的。其實,只需4行。


計算兩個非負整數 p 和 q 的最大公約數:若q 是 0,則最大公約數為 p。否則,將 p 除以q 得到餘數 r,p 和 q 的最大公約數即為 q 和r 的最大公約數。
Java 語言描述
Public static int gcd(int p, int q)//形參兩個
{
	if (q == 0) return p;//排除零的情況
	int r = p % q;    //求餘數
	return gcd(q, r);// 利用遞迴 將p 和 q 的最大公約數即為 q 和r 的最大公約數轉化為程式,再求餘數,直到return
}


相關推薦

輾轉除法演算法java實現

輾轉相除法,又叫歐幾里得演算法,是用以計算兩個非負整數的最大公約數,在數學課本上是見過了,程式又是怎樣實現的。其實,只需4行。 計算兩個非負整數 p 和 q 的最大公約數:若q 是 0,則最大公約數為

C語言輾轉除法演算法求最大公約數

演算法敘述: 設(a,b)表示a和b的最大公約數 若c為a/b的餘數(c=a%b) 則(a,b)=(b,c). #include<stdio.h> int gcd(int a,int b

C語言輾轉除/減法演算法求最大公約數和最小公倍數

#include <stdio.h> #include <stdlib.h> //題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 //採用任何兩種演算法來完成上述題目,並比較2種演算法的時間複雜度和空間複雜度。 int main() { int

同餘定理演算法

如果  (a-b)%m==0  那麼 a%m==0  b%m==0 a,b關於模m同餘。   求最大公約數 #include "pch.h" #include<iostream> #include<cstdio> #include<

BZOJ ~ 1385 ~ Division expression 演算法

題解 原式化為情況下最有可能。然後看能否把x2的約去即可。當然不能把上面那個數字乘出來了,它太大了,所以我們拿上面的每一個數字和x2去約GCD即可。 #include<bits/stdc+

四行程式碼求最大公約數演算法

本文要介紹的不是普通的歐幾里德演算法(輾轉相除法),而是利用位操作實現的歐幾里得演算法。 利用位操作實現歐幾里得演算法主要有以下兩個優點:1.程式碼量少  2.效率高。 首先,歐幾里德演算法求最大公約數的做法是: ⒈ 令r為a/b所得餘數(0 <

關於最大公約數的三種解法之一演算法

亞歷山大時期的歐幾里得所著的《幾何原本》中這樣定義了最大公約數的演算法,兩個不全為0的非負整數m,n的最大公約數記為gcd(m,n),代表能夠整除(即餘數為0)m,n的最大正整數。歐幾里得演算法的方法就是重複應用下列等式,一直到m  mod n等於0。            

POJ-1061-青蛙的約會 擴充套件演算法

原題連結: http://poj.org/problem?id=1061 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定

HDU-2669-Romantic 擴充套件演算法

原題連結: http://acm.hdu.edu.cn/showproblem.php?pid=2669 The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Trees

POJ-2142-The Balance 擴充套件演算法

原題連結: Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspiri

poj 1061 青蛙的約會​​​​​​​拓展演算法

【題目】 【題意】 兩隻青蛙在給定長度的數軸上運動,給定初始位置和跳躍每次的長度,問在什麼時候兩隻青蛙能相遇。 【思路】 根據題意有x+mt=y+nt+kl,t表示跳躍次數。變化一下得到式子

兩個數的生成範圍兩個生成元拓展演算法

最近遇到一個題,就是給兩個數,這兩個數有無限個,問你由這些數能得到哪些數。 還可以擴充套件成有n個數,問你能得到哪些數 這裡其實是有一個結論的,就是: ①兩個數互質,就可以生成很多很多數,而且從某個數開始就是連續的 ②兩個數不互質,生成的數一定是gcd(a,b)的

解的個數直線上的點數論-擴充套件演算法

Description  已知x,y滿足如下條件:  ax+by+c=0 ; x1 <= x <= x2 ; y1 <= y <= y2 ; x,y均為整數。  其中:a,b,c,x1,x2,y1,y2 都是絕對值不超過 10^8 的整數。  求(x,

ACM基礎演算法複習STL + DFS + BFS + 並查集 + 快速冪 + 演算法

從進隊到現在,師哥們陸陸續續講了很多基礎演算法,對我這種菜雞而言沒有什麼基礎,感覺都挺難的,所以還是複習複習,看看還有多少沒還給師哥的。。。 上課的內容大致有以下幾個模組(C語言基礎和python姑且不算) 1. STL

POJ 2115 for求迴圈次數-數論-同餘方程+擴充套件演算法

題意:給定for迴圈的初始值,結束值和增量,還有一個模,求最少的迴圈次數。 分析: 讀完題後應該就知道是一個同餘的概念,所以就是解一個一元一次同餘方程,像上題一樣用擴充套件歐幾里得演算法。這題的trick點是k最大為32,那麼2^32超出了int,要用long long,所

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

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

演算法輾轉除法描述,證明和python實現

greatest common divisor 又稱輾轉相除法 演算法描述:給定兩個正整數m和n,求他們的最大公因子,即能夠同時整除m和n的最大正整數。 演算法步驟: 若m<n,那麼m↔n,為了確保m>n。 求m除以n得到的餘數r。 若r為0,演算法

Python程式碼筆記1輾轉除法/演算法求最大公約數gcdm,n

歐幾里得演算法求最大公約數:輾轉相除法 具體做法:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除除數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,

演算法(輾轉除法)c++實現

歐幾里得演算法 歐幾里得演算法也叫輾轉相除法,是求兩個整數最大公約數的演算法。 當然也可以求最小公倍數。 演算法實現 其實演算法的實現原理就是,有整數a b兩個,每次求的一個數字r = a % b,然後把b放到a的位置,把r放到b的位置,遞迴呼叫。

CFF 1028 判斷互質求最大公約數演算法輾轉除法

題目: 輸入兩個正整數m和n,判斷m和n是否互質(即最大公約數為1),是則輸出Yes,否則輸出No。 輸入輸出: 輸入兩個整數m和n,中間用空格隔開。 如互質輸出Yes,否則輸出No。 樣例: 36 56 No 7 9 Yes 資