算法:輾轉相除法求最大公約數(C語言實現)


輾轉相除法,一種求最大公約數的算法

已知:A / B = C ······ R  (A、B、C、R皆是整數)

假設:D是A的余數,D也是B的余數,那么D就是A和B的公約數

D是A和B的約數,則A和B是D的倍數,B * C也是D的倍數

既然A與B*C都是D的倍數,那么A與B*C的也是D的倍數

A - B*C = R

所以R也是D的倍數

如果D是A或B的公約數,那么D也是B和R的公約數

故:(A,B)= (B,R)

由以上證明則可以求出最大的公約數

例如:求72和28的最大公約數

72 / 28 = 2 ······ 16

↓      ↓      ↓          ↓

28 / 16 = 1 ······ 12

↓      ↓      ↓          ↓

16 / 12 = 1 ······ 4

↓      ↓      ↓         ↓

12 / 4  =  3  ······ 0

現在可以知道 72與28的最大公約數是4

 

 1 #include <stdio.h> 
 2 int main(){
 3     int a;                    // 除數
 4     int b;                    // 被除數
 5     int r=1;                 // 余數,賦初值為1 
 6     printf("輸入除數與被除數(空格分開):");
 7     scanf("%d %d",&a,&b);
 8     while(r!=0){             // 如果a<b,亦無需顛倒ab,在計算中商0余除數本身,在下次運算中自可顛倒回來 
 9         r = a % b;
10         a = b;
11         b = r;
12     }
13     printf("最大公約數為:%d\n",a);        // 此時b的值已經在a中了,所以輸出的a就是最大公約數 
14     return 0;
15 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM