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

最大公約數(輾轉相除法)

   最大公因數,也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的一個.最大公約數有多種方法,常見的有質因數分解法,短除法,輾轉相除法,更相減損法.

這裡要講的是輾轉相除法。先來看看百度百科上給出的

[程式碼實現]

/*遞迴實現*/
#include<cstdio>
int GCD(int a,int b)
{
    return a%b?GCD(b,a%b):b;
}
int main()
{
    int x,y;
    scanf("%d%d",&x,&y);
    printf("%d",GCD(x,y));
    return 0;
}
/*非遞迴實現*/
#include<cstdio>
#include<cstdlib>
int x,y;
int gcd(int m,int n)
{
    int t;
    while (m%n!=0)
    {
        t=m%n;
       m=n;
        n=t;
    }
 return n;
}
int main()
{
    scanf("%d %d",&x,&y);
    printf("%d",gcd(x,y));
    return 0;
}
接下來我們來看一道例題; [問題描述] 輸入兩個正整數m和n, 求其最大公約數和最小公倍數. 
[解題思路]
<1> 用輾轉相除法求最大公約數 演算法描述: m對n求餘為a, 若a不等於0 則 m <- n, n <- a, 繼續求餘 否則 n 為最大公約數 
<2> 其中最小公倍數與最大公約數存在這樣的關係, 最小公倍數 = 兩個數的積 / 最大公約數
[程式碼實現]
#include <stdio.h>
int main() 
{
	int m, n; int m_cup, n_cup, res; /*被除數, 除數, 餘數*/ 
	printf("Enter two integer:\n"); 
	scanf("%d %d", &m, &n); 
	if (m > 0 && n >0) 
	{ 
		m_cup = m; 
		n_cup = n; 
		res = m_cup % n_cup; 
		while (res != 0) 
		{ 
			m_cup = n_cup; 
			n_cup = res; 
			res = m_cup % n_cup; 
		}
		printf("Greatest common divisor: %d\n", n_cup); 
		printf("Lease common multiple : %d\n", m * n / n_cup); 
   } 
  else printf("Error!\n"); 
  return 0; 
} 

相關推薦

大公約數-輾轉除法-更減損術

輾轉相除法 兩個正整數a和b(a>b),它們的最大公約數等於a除以b的餘數c和b之間的最大公約數。直至可以整除 #include<iostream> #include<cmat

大公約數(輾轉除法)

   最大公因數,也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的一個.最大公約數有多種方法,常見的有質因數分解法,短除法,輾轉相除法,更相減損法. 這裡要講的是輾轉相除法。先來看看百度

大公約數-輾轉除法(Java)

言: 求最大公約數的演算法有很多,有更相減損法,輾轉相除法等,但是較易用演算法實現的,且效率相對較高的就是輾轉相除法了。以下介紹用Java實現輾轉相除法,記錄學習通時也當作分享。 原理: 兩

HDU 1108.小公倍數-輾轉除法

tput pre str 給定 sam 兩個 計算 tdi 試用 最小公倍數 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi

輾轉除法大公約數 php

輾轉相除法<?php /* 輾轉相除法過程 兩數相除取余數,判斷余數是否為零, 為零,則除數為當前最大公約數, 不為零,則當前除數變作被除數,余數變作除數, 再相除取余,再判斷,直到余數為零。 12 8 12%8 余 4 8%4 余 0 4為最大公約數。 */ $m = isset(

求兩個數的大公約數輾轉除法與更減損法(遞歸叠代)

叠代 div 余數 公約數 穩定 log test 算法 復雜度 問題:給出兩個數a和b,求出他們的最大公約數(greatest common divisor)。 解法一:輾轉相除法,又叫歐幾裏得算法。兩個正整數a和b(a>b),他們的最大公約數等於a除以b的余數和b

輾轉除法(gcd)求大公約數

輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),縮寫為GCD,是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數

歐幾里得演算法(輾轉除法)求大公約數程式碼

    求解最大公約數依據如下定理:gcd(a,b) = gcd(b,a mod b) (不妨設a>b 且r=a mod b ,r不為0); 兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。 程式碼: 非遞迴演算法: int gcd(in

輾轉除法大公約數小公倍數

最大公約數(遞迴): int gcd(int a,int b){ if(a%b) return gcd(b,a%b); return b; } 最小公約數(迴圈): int gcd(int a,int b){ int temp; while(b>0){ te

C語言輾轉除法大公約數 小公倍數

// dizhi.cpp : 定義控制檯應用程式的入口點。 //   #include "stdafx.h" #include <stdio.h> int CommonDivisor(int x, int y);//最大公約數 int CommonMultiple(in

輾轉除法與更減損術(求大公約數

輾轉相除法:兩個正整數a和b(a>b),它們的最大公約數等於a除以b的餘數c和b之間的最大公約數。比如10和25,25除以10商2餘5,那麼10和25的最大公約數,等同於10和5的最大公約數。 以上程式碼存在取模運算,大資料較大時,其效率較差 更相減損術:兩

c++中求兩個數的大公約數小公倍數(輾轉除法

輸入兩個正整數m和n,求其最大公約數和最小公倍數 #include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) {

C語言中求大公約數的兩種方法:輾轉除法和更減損術

輾轉相除法:        輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如

輾轉除法大公約數

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

輾轉除法大公約數小公倍數

程式碼如下: #include<iostream> using namespace std; void divisio_algorithm(int x,int y) { int m = x, n = y, c, t; //m是較大數,n

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

輾轉除法求兩個數的大公約數

輾轉法相除:先將大數除以小數,如果整除,小數就是它們的最大公因數,如果不能整除,就記下餘數,用前面的除數(就是小數),除以這個餘數,以下類推,每一次都用前一個除式的除數除以自己的餘數,直到有一個除法能整除,這時,最後能整除的除式的除數,就是這兩個數的最大公因數。   #define

輾轉除法+更減損法求大公約數

怎麼求兩個數的最大公約數呢? 簡單的想法就是直接暴力列舉,試出最大公約數 暴力列舉 #暴力列舉 def GCD(numberA,numberB): gcd=1 for i in range(2,max(numberA,numberB

C#輾轉除法大公約數小公倍數

class Program { static void Main(string[] args) { int num1, num2,

C語言第七篇:輾轉除法大公約數

一、演算法的基本概念 1、什麼是演算法? 為解決問題而採取的方法和步驟。 演算法是由一系列規則組成的過程,這些規則確定了一個操作的順序,以便能在有限步驟內得到特定問題的解。 2、演算法重要嗎