發(fā)布時(shí)間:2011-09-16 共1頁(yè)
1: /*輾轉(zhuǎn)相除法基于如下原理:兩個(gè)整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的差的最大公約數(shù)。
2: 例如,252和105的最大公約數(shù)是21(252 = 21 × 12;105 = 21 × 5);
3: 因?yàn)?52 ? 105 = 147,所以147和105的最大公約數(shù)也是21。在這個(gè)過(guò)程中,較大的數(shù)縮
4: 小了,所以繼續(xù)進(jìn)行同樣的計(jì)算可以不斷縮小這兩個(gè)數(shù)直至其中一個(gè)變成零。這時(shí),所剩下的
5: 還沒(méi)有變成零的數(shù)就是兩數(shù)的最大公約數(shù)。
6: */
7: #include <stdio.h>
8:
9: int getGCDAndLCM(int a,int b){
10: int max=a>b?a:b;//將較大的數(shù)賦給max
11: int min=(max=a)?b:a;//將較小的數(shù)賦給min
12: int temp;//暫時(shí)存儲(chǔ)變量
13: while(max!=0){
14: temp=min%max;
15: min=max;
16: max=temp;
17: }
18: printf("最大公約數(shù)為%d\n",min);
19: printf("最小公倍數(shù)為%d\n",a*b/min);
20: }
21:
22: int main(){
23: printf("輸入兩個(gè)數(shù)整數(shù)值\n");
24: int a,b;
25: scanf("%d",&a);
26: scanf("%d",&b);
27: getGCDAndLCM(a,b);
28: return 0;
29: }