求最大公约数和最大公倍数
一、求三个数的最大公约数和最大公倍数
/* 时间: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(" 这三个数的最小数是:%d,最大数是:%d。 ", min, max); printf(" 最大公约数是%d,最小公倍数是%d。 ", 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 ", a); //a的值即为最大公约数; printf("最小公倍数为:%d ", m*n/a); return 0; }
三、求最大公约数
/* 2017年3月16日20:42:14 功能:求最大公约数 */ #include"stdio.h" int fun(int, int); int main() { int a, m, n, i, j, x, y, k = 1, flage; int q[100]; int p[100]; printf("请输入两个数,a和b,用空格隔开:"); scanf("%d %d", &m, &n); for (i = 1,x =0;i <= m; i++) //依次取出可以整除的数放入到整型数组中,注意整型数组末尾不需要加上结尾标识符' ' if(m % i ==0) q[x++] = i; for (i = 1,y =0;i <= n; i++) if(n % i ==0) p[y++] = i; for (i = 0; i < x; i++) //从一个整型数组中依次取数,与另一个整型数组中的数据相比较,如果相等且大于1,则返回跳出内循环,直到数组中的所有数据全部比较完,则跳出所有循环 for(j =0; j < y;j++) if(q[i] == p[j] && q[i]>1) { a = q[i]; flage = 1; break; } if(flage == 1) printf("%d 和 %d 的最大公约数是%d ", m, n, a); else printf("%d 和 %d 的最大公约数是%d ", m, n, k); } /* 总结: 1、最大公约数的定义:几个数的公因子,并且因子在公因子中最大 2、在VC++6.0中显示的结果: ———————————————————————————— 请输入两个数,a和b,用空格隔开:5 6 5 和 6 的最大公约数是1 请输入两个数,a和b,用空格隔开:9 12 9 和 12 的最大公约数是3 ———————————————————————————— */