31、求最大公約數和最大公倍數
阿新 • • 發佈:2017-06-30
2017年 可能 b+ 意義 enter 最小公倍數 余數 c++ ==
求最大公約數和最大公倍數
一、求三個數的最大公約數和最大公倍數
/* 時間:2017年6月30日20:14:33 功能:求三個數的最大公約數與最小公倍數 */ # include <stdio.h> main() { int x, y, z, a, b, min, max; printf("請輸入三個整數以空格分隔:"); scanf("%d %d %d", &x,&y,&z); if(x<y) { min = x; max = y; } else { min = y; max = x; } if(min>z) min = z; //求出三個數中最小數,賦給a; if(max<z) max = z; //求出三個數中最大數,賦給b; for(a=min;a>=1;a--) //(最大公約數不可能大於三個數中的最小數)用這三數去除以a,a的值每次-1; //也可以(a=1;a>=1;a++),或者(a=min;a<=min;a--) { if(x%a==0 && y%a==0 && z%a==0) //當三個數同時被a整除,此時a的值就是三個數的最大公約數; break; // 停止a窮舉; } for(b = max;;b++) //(最小公倍數不會小於三個數中的最大數),起點用max賦值,可以減少無意義的窮舉; //(b = max;;b++)分號之間可以寫做(b = max;b>=max;b++)留空也一樣,但不能省略;號。 { if(b%x==0 && b%y==0 && b%z==0) //當b能被x、y、z同時整除,此時b的值就是三個數的最小公倍數; break; // 停止b窮舉; } printf("\n這三個數的最小數是:%d,最大數是:%d。\n", min, max); printf("\n最大公約數是%d,最小公倍數是%d。\n\n", a, b); } /* 在VC++6.0中執行的結果如下: ------------------------- 請輸入三個整數以空格分隔:1 5 6 這三個數的最小數是:1,最大數是:6。 最大公約數是1,最小公倍數是30。 ------------------------- */
二、求兩個數的最大公約數和最大公倍數
/* 2017年6月30日20:06:15 求兩個數的最大公約數-輾轉相除法。 */ # include <stdio.h> int main(void) { int m, n, a, b, t; printf("請入要求的兩個數,以空格分隔: m,n:"); scanf("%d %d",&m, &n); if (m<n) { t = m;m = n;n = t; // 先交換大小,保證被除數為大,除數為小; } a = m; b = n; do { t=a%b; //用大數除小數,得出余數; a = b; //將除數(小數)賦為被除數; b = t; //余數賦為除數,直到余數為0時跳出循環; } while(b!=0); //也可以寫成while(t!=0); printf("最大公約數為:%d\n", a); //a的值即為最大公約數; printf("最小公倍數為:%d\n", m*n/a); return 0; }
31、求最大公約數和最大公倍數