C語言:求解最大公約數(枚舉 & 輾轉相除法)

枚舉法求解最大公約數

  1. 算法思路

    • 枚舉
      1、要求隨意給定任意兩個數值,計算最大公約數,這時就產生了給定數值大小的問題即:終止條件問題。枚舉的意思是:通過列舉不同的數值看是否滿足同時可以被給定兩個數整除的條件,如果滿足則存儲,最後比較其中最大值輸出。
  2. 代碼如下:

//枚舉法求解最大公約數
#include<stdio.h>
int main()
{
	int a,b;
	int i;
	int min;
	int gcd;
	printf("請輸入倆個數(中間空格):") ; 
	scanf("%d %d:",&a,&b);
	if(a<b){
		min=a;
	}
	else min = b;
	for(i=1;i<=min;i++){
		if(a%i==0){
			if(b%i==0){
				gcd=i;	
			}			
		}
	}
	printf("%d",gcd);
	return 0;
	
}

代碼輸出:
		請輸入倆個數(中間空格):12 72
		12
		--------------------------------
		Process exited after 13.55 seconds with return value 0
		請按任意鍵繼續. . .

代碼分析:
代碼剛開始用於判定輸入值的大小引入了變量 min ;min 變量的意義在於控制枚舉法中循環條件,類似於抽硬幣程序中的多層判斷,不過這個程序只要求一個結果,所以不要多重循環。

輾轉相除法求解最大公約數

  1. 算法思路
  • 輾轉相除法

    這裏算法思路主要是輾轉相除法也稱歐幾里得算法。

  1. 代碼如下:
//輾轉相除法計算兩個數的公約數 
#include<stdio.h>
int main()
{
	int a,b;
	int t;
	scanf("%d %d",&a,&b);
	while(b!=0){
		t=a%b;
		a=b;
		b=t;
		printf("a=%d,b=%d,t=%d\n",a,b,t);
	}
	printf("gcd=%d\n",a);
	return 0;
}

輸出結果:
		12 18
		a=18,b=12,t=12
		a=12,b=6,t=6
		a=6,b=0,t=0
		gcd=6
		
		--------------------------------
		Process exited after 3.187 seconds with return value 0
		請按任意鍵繼續. .

代碼分析:與枚舉法相比,輾轉相除法可以大大提高代碼的執行效率。

輾轉相除法

簡介:
歐幾里德算法是用來求兩個正整數最大公約數的算法。是由古希臘數學家歐幾里德在其著作《The Elements》中最早描述了這種算法,所以被命名爲歐幾里德算法,擴展歐幾里德算法可用於RSA加密等領域。
其計算原理依賴於下面的定理:定理:兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。最大公約數(Greatest Common Divisor)縮寫爲GCD。
輾轉相除法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章