1. 程式人生 > >C語言——求兩個數的最大公約數和最小公倍數

C語言——求兩個數的最大公約數和最小公倍數

求兩個數的最大公約數的常用方法:

※“輾轉相除法”,又名歐幾里得演算法。基本方法如下:

設兩數為a和b(a>b),用a除以b,得a÷b=q......r,若r=0 ,則最大公約數為b;若r≠0 ,則再用b÷r,得b÷r=q......r',若r'=0,則最大公約數為r',若r'≠0,則繼續用r÷r'......直到能夠整除為止,此時的除數即為最大公約數。

例如:a=99,b=18。a÷b=99÷18=5......9不能整除,則繼續b÷r=18÷9=2可以整除,則此時的除數9即為a和b兩數的最大公約數。

①程式碼如下:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int t = 0;
	scanf("%d%d", &a, &b);//99,18
	while (a%b != 0){
		t = a%b;
		a = b;
		b = t;
	}
	printf("最大公約數為:%d\n", b);
	return 0;
}

首先,從鍵盤鍵入兩個數a和b的值,變數t來儲存餘數。用while迴圈來判斷能否整除,根據“輾轉相除法”,先用第一個數a÷b再將除數b賦給a,餘數賦給b,迴圈往復,直到能整除時結束迴圈,此時的除數b即為最大公約數。

(特別說明:若a<b,例如a=18,b=99。t=a%b=18;a=99;b=t=18。我們發現通過一次迴圈交換了a、b的值,這時就能滿足a>b的條件了,在繼續根據輾轉相除的方法即可得到最大公約數。)

※拓展:求兩個數的最小公倍數

關於最小公倍數與最大公約數,有這樣的定理:最小公倍數×最大公約數=兩數的乘積。

即:最小公倍數=兩數的乘積÷最大公約數

②程式碼如下:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int t = 0;
	scanf("%d%d", &a, &b);//18 99
	int m = a;
	int n = b;
	while (a%b != 0){
		t = a%b;//餘數 9
		a = b;//18
		b = t;//9
	}
	printf("最大公約數為:%d\n", b);//9
	printf("最小公倍數為:%d\n",m*n/b);
	return 0;
}

首先,從鍵盤鍵入兩個數a和b的值,變數t來儲存餘數。再設兩個變數m、n來儲存a、b的原值。

先根據輾轉相除法求出最大公約數b'(過程同①),再由最小公倍數=兩數的乘積÷最大公約數=m×n÷b'求得最小公倍數。


相關推薦

C語言個數大公約數小公倍數

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

C語言——個數大公約數小公倍數

求兩個數的最大公約數的常用方法:※“輾轉相除法”,又名歐幾里得演算法。基本方法如下:設兩數為a和b(a>b),用a除以b,得a÷b=q......r,若r=0 ,則最大公約數為b;若r≠0 ,則再用b÷r,得b÷r=q......r',若r'=0,則最大公約數為r',若

C語言經典例子,個數大公約數小公倍數

求兩個數的最大公約數,我們首先可以想到輾轉相除法,即用最大的數除以小的數,得到以後的餘數,再用上次較小的數繼續除以餘數,直到餘數為0.最後剩下的最小數即為最大公約數。 例如,16,10,求最大公約數。            16%10=4(餘數)            10

C語言如何個數大公約數小公倍數

  void Gyueshu(int max, int min) { int i = 0, temp = 0; if (max < min) //判斷並交換兩個數的大小 { temp = max; max = min; min =

c語言個數大公約數小公倍數

#include<stdio.h> int main() { int a,b,t,r; printf("請輸入兩個數字:\n"); scanf("%d %d",&a,&b); if(a<b) {t=b

C語言分別個整數的大公約數小公倍數

#include <stdlib.h> #include <math.h> #include <stdio.h> //遞迴演算法 //歐幾里得演算法 void GCD(int a, int b) {     int temp;

C語言例項—輸入個正整數mn,大公約數小公倍數(gcc 編譯)。

1.輾轉相除法 輾轉相除法是古希臘求兩個正整數的最大公約數的,也叫歐幾里德演算法,其方法是用較大的數除以較小的數,上面較小的除數和得出的餘數構成新的一對數,繼續做上面的除法,直到出現能夠整除的兩個數,其中較小的數(即除數)就是最大公約數。以求288和123的最大公約數為例,操作如下: 288÷1

c++中個數大公約數小公倍數(輾轉相除法)

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

鍵入個數大公約數小公倍數----初學c

#include <stdio.h> void fun1(int *x,int *y); //將兩個數比較大小,使x>y void fun2(int *a,int *b); //輾轉反側法 void main() { /*定義變數*

C#基礎:個數大公約數小公倍數

            int number1 = 0;             int  number2 = 0;             Console.WriteLine("請輸入兩個整數:");             number1 = int.Parse(Console.ReadLine()

c語言:輸入個正整數mn,大公約數小公倍數

輸入兩個正整數m和n,求其最大公約數和最小公倍數。解:程式:#include <stdio.h>int main(){int num1, num2, t,p;printf("請輸入兩個正整數

C語言例項12——輸入個正整數mn,大公約數小公倍數

題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 //程式分析:利用輾除法。 #include<stdio.h> int main(){ int a,b,num1,num2,te

C語言:寫個函式,分別大公約數小公倍數

題目:寫兩個函式,分別求兩個整數的最大公約數和最小公倍數,用主函式呼叫這個兩個函式,並輸出結果。兩個整數由鍵盤輸入 分析:求最大公約數,需要用到輾轉相除法: 輾轉相除法:設兩數為a、b(a>b

C/C++程式設計題之個數大公約數小公倍數

求兩個數的最大公約數和最小公倍數 方法:最大公約數使用輾轉相除法求,最小公倍數等於兩個數的乘積/最大公約數 輾轉相除法的原理:用輾轉相除法求幾個數的最大公約數,先求出其中任意兩個數的最大公約數,再

C語言之函式呼叫07—4個數大公約數小公倍數

//函式呼叫 /* ========================================================== 題目:求4個數的最大公約數和最小公倍數。 ===============================================

個數大公約數小公倍數

兩個 rem pac [] while ext bre list AS package java; import java.util.ArrayList; import java.util.List; import java.util.Scanner; pu

個數大公約數小公倍數

esp long cout gcd urn clas 代碼 () else 求最大公約數利用輾轉相除法: long long gcd(long long a,long long b) { if(b==0) return a; else

C語言輾轉相除/相減法(歐幾里得演算法)大公約數小公倍數

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

【經典100題】 題目16 個數大公約數小公倍數

題目 求兩個數的最大公約數和最小公倍數。 最大公約數:指兩個或多個整數共有約數中最大的一個 最小公倍數:指兩個或多個整數共有倍數中最小的一個 說明:自己沒有搞清楚最大公約數和最小公倍數的定義,結果走了不少彎路,下面的解法是一種比較簡單但是效率的不高的解法。可以參考“輾除法”,在後續會

c語言大公約數小z公倍數的函式

1. ```#include<stdio.h> #include<stdlib.h> int fun(int a,int b) { int i,t,n,f; f=a*b; if(a<b) {t=a; a=b; b=t; } while(b!=0) {n=a