求最小公約數(輾轉相除法)
解法一:
import java.util.Scanner;
public class win {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int gcd=1;
int r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
System.out .println(a);
}
}
解法二:
import org.junit.Test;
/**
* 求兩個數的最大公約數,,最小公倍數LCM(m,n) = m*n - GCD(m,n)
* @author Administrator
*
*/
public class GCD {
//GCD遞迴求法
public int getGCD01(int m , int n) {
// int a = Math.max(m, n);
// int b = Math.min(m, n);
// m = a;
// n = b;
// if ( m % n == 0)
// return n;
// else{
// int temp = m % n;//除數
// m = n;
// getGCD01(m,temp);
// }
// return b;
return m>=n?m%n==0?n:getGCD01(n,m%n):n%m==0?m:getGCD01(m,n%m);
}
//GCD遞推求法
public int getGCD02(int m , int n){
int r = 0;//餘數
int max = Math.max(m, n);
int min = Math.min(m, n);
while(max % min != 0) {
r = max % min;
max = min;
min = r;
}
return min;
}
//LCM
public int getLCM(int m , int n){
int gcd = getGCD01(m,n);
int lcm = m*n/gcd;
return lcm;
}
@Test
public void testGCD01(){
System.out.println( getGCD01(100,44) );
System.out.println( getGCD01(100,44) );
}
@Test
public void testGCD02(){
System.out.println( getGCD02(100,44) );
System.out.println( getGCD02(44,100) );
}
@Test
public void testLCM(){
System.out.println( getLCM(100,44) );
}
}
相關推薦
求最小公約數(輾轉相除法)
解法一: import java.util.Scanner; public class win { public static void main(String[] args) {
c++中求兩個數的最大公約數和最小公倍數(輾轉相除法)
輸入兩個正整數m和n,求其最大公約數和最小公倍數 #include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) {
python求兩個數字的最大公約數(輾轉相除法)
def gcd(a,b): while b: r = a%b a = b b = r return a print(gcd(15,25
求最大公因子(輾轉相除法原理)(擴充套件的歐幾里德演算法)
while(n != 0) { r = m % n; m = n; n = r; } printf("Their greatest common divisor is %d.\n", m);
求兩個數的最大公約數,輾轉相除法與更相減損法(遞歸叠代)
叠代 div 余數 公約數 穩定 log test 算法 復雜度 問題:給出兩個數a和b,求出他們的最大公約數(greatest common divisor)。 解法一:輾轉相除法,又叫歐幾裏得算法。兩個正整數a和b(a>b),他們的最大公約數等於a除以b的余數和b
【C++解題報告】求最大公約數問題(輾轉相除法)
題目來源: 基礎班《函式、遞推、遞迴》,遞迴第5題。 描述: 總時間限制:1000ms 記憶體限制:65536KB 給定兩個正整數,求它們的最大公約數。 輸入: 輸入一行,包含兩個正整數(<1,000,000,000)。 輸出:
leetcode 365. Water and Jug Problem 兩個水杯倒水問題 + 最大公約數Gcd輾轉相除法
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine
歐幾里得演算法(輾轉相除法)描述,證明和python實現
greatest common divisor 又稱輾轉相除法 演算法描述:給定兩個正整數m和n,求他們的最大公因子,即能夠同時整除m和n的最大正整數。 演算法步驟: 若m<n,那麼m↔n,為了確保m>n。 求m除以n得到的餘數r。 若r為0,演算法
三種方法求最大公約數(C語言版)
問題描述:用三種方法求兩個的整數的最大公約數。 演算法分析: 1.相減法:輸入兩整數a和b,(1)如果a>b,a=a-b;(2)如果a<b,b=b-a;(3)如果a=b,a或b就為這兩個整數的最大公約數 (4)如果a!=b,則再執行(1)或(2) 程式實現如下
求兩個數的最大公約數(列舉法與輾轉相除法)
最大公約數定義:把能夠整除某一個數的數,叫做這個數的約數。幾個數所公有的約數叫這幾個數的公約數。公約數中最大的一個叫做這幾個數的最大公約數。 例如:27和15,,27 的約數有1,27,3,9;15的約數為:1,15,3,5。而27 和15 的公約數為1,3.則最大公約數為3。 在瞭解了最大公約數
如何用匯編語言編寫一個求最大公約數(GCD)的過程——輾轉相除法
選題:《組合語言 基於X86處理器》【Kip Irvine著】—— Chapter7 程式設計練習第6題 兩個數的最大公約數(GCD)是指能整除這兩個數的最大整數。下述虛擬碼描述的是迴圈整數除法的GCD演算法:int GCD(int x,int y) {
歐幾里得演算法(輾轉相除法)求最大公約數程式碼
求解最大公約數依據如下定理:gcd(a,b) = gcd(b,a mod b) (不妨設a>b 且r=a mod b ,r不為0); 兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。 程式碼: 非遞迴演算法: int gcd(in
hdu2028求最小公倍數(歐幾裏得)
urn class pac color mod ostream 兩個 pla spl 用到了歐幾裏得算法: int gcd(int a,int b) { if(b==0)return a; gcd(b,a%b); } View Code 這道題強調
求最小公倍數(java)
import java.util.*; public class GetLCM { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int a =
習題4-7 最大公約數和最小公倍數 (15 point(s))
本題要求兩個給定正整數的最大公約數和最小公倍數。 輸入格式: 輸入在一行中給出兩個正整數M和N(≤1000)。 輸出格式: 在一行中順序輸出M和N的最大公約數和最小公倍數,兩數字間以1空格分隔。 輸入樣例: 511 292 輸出樣例: 73 2044 #incl
推廣的歐幾里德演算法(求最大公約數和乘法逆元)
歐幾里德演算法 歐幾里德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。其計算原理依賴於下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 證明:a可以表示成a = kb + r,則r = a mod b 假設d是a,b的一個公約數,
四行程式碼求最大公約數(歐幾里得演算法)
本文要介紹的不是普通的歐幾里德演算法(輾轉相除法),而是利用位操作實現的歐幾里得演算法。 利用位操作實現歐幾里得演算法主要有以下兩個優點:1.程式碼量少 2.效率高。 首先,歐幾里德演算法求最大公約數的做法是: ⒈ 令r為a/b所得餘數(0 <
c語言編程求兩個整數的最大公約數(兩種方法)
方法 約數 \n tdi amp 編程 stdio.h for == 第一種(for循環) #include <stdio.h> #include <stdlib.h> int main() { int i, min, k, a, b;
樹狀數組求最大值 (RMQ with Shifts)
art code else pan [1] int space -s article 代碼: #include <iostream> #include <stdio.h> #include <string.h> #include
Floyd演算法求最短路徑(附程式碼例項)
Floyd演算法 使用範圍: 1)求每對頂點的最短路徑; 2)有向圖、無向圖和混合圖; 演算法思想: 直接在圖的帶權鄰接矩陣中用插入頂點的方法依次遞推地構造出n個矩陣D(1), D(2), …, D(n), D(n)是圖的距離矩陣, 同時引入一個後繼