1. 程式人生 > >求兩個數的最大公約數(列舉法與輾轉相除法)

求兩個數的最大公約數(列舉法與輾轉相除法)

最大公約數定義:把能夠整除某一個數的數,叫做這個數的約數。幾個數所公有的約數叫這幾個數的公約數。公約數中最大的一個叫做這幾個數的最大公約數。 例如:27和15,,27 的約數有1,27,3,9;15的約數為:1,15,3,5。而27 和15 的公約數為1,3.則最大公約數為3。

在瞭解了最大公約數後我們便可以從同時要被兩個數整除,且還是最大值可以想到一個比較麻煩的方法。

方法一:列舉法

用迴圈進行列舉依次排查,從1開始到它本身(這裡的迴圈結束的表示可以在兩個數之間隨意選擇,只要可以取到它本身就可以),因為我們是從小到大依次排列過來的所以每次只要將可以整除的數字賦值給一個變數就可以,保證變數每次都會更新為最大值。

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a, b;
 5     int j = 0;
 6     printf("請輸入兩個整數:\n");
 7     printf("a=");
 8     scanf("%d", &a);
 9     printf("b=");
10     scanf("%d", &b);
11     //這裡從1開始依次排查,直到取到它本身為止
12     //迴圈可以保證每次取到的公約數依次增大
13     for (int i = 1;i <= b;i++)
14 { 15 if (a % i == 0 && b % i == 0) 16 { 17 j = i;//將公約數賦值給變數 18 } 19 } 20 printf("最大公約數為:%d", j); 21 22 return 0; 23 }

方法二:輾轉相除法

先將兩個整數a與b進行相除,如果餘數為0(a%b==0),則b為兩數的最大公約數;如果不等於0,則將b賦值給a,將餘數賦值給b,在對a與b進行相除,直到餘數為0時終止(a%b==0),則b為最大公約數。

 1
#include<stdio.h> 2 int main() 3 { 4 //方法二:輾轉相除法 5 int a, b, i; 6 printf("請輸入兩個整數:\n"); 7 printf("a="); 8 scanf("%d", &a); 9 printf("b="); 10 scanf("%d", &b); 11 i = a % b; 12 while(i != 0) 13 { 14 a = b; 15 b = i; 16 i = a % b; 17 } 18 printf("%d",b); 19 20 return 0; 21 }