1. 程式人生 > >求最小公約數(輾轉相除法)

求最小公約數(輾轉相除法)

解法一:


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)是圖的距離矩陣, 同時引入一個後繼