总结了两种方法,第一种:
#include<stdio.h> int main(){ int m, n; int i,j; int count = 0; //计时器 scanf_s("%d%d", &m, &n); if (m < n) { for (i=m; i >=m/2 ; i --) { if (m%i == 0 && n%i == 0) { printf("其最大公因数为:%d\n", i); } } for (j = n; j <= m * n; j++) { if (j%n == 0 && j%m == 0) { count++; if (count == 1) { // 第一次的条件才符合! printf("其最小公倍数为:%d\n", j); } } } count = 0; } if (m > n) { for (i = n; i >= n / 2; i--) { if (n%i == 0 && m%i == 0) { printf("其最大公因数为:%d\n", i); } } for (j = m; j <= m * n; j++) { if (j%m == 0 && j%n == 0) { count++; if (count == 1) { printf("其最小公倍数为:%d\n", j); } } } count = 0; } if(m == n) { printf("其最大公因数为:%d\n", n); printf("其最最小公倍数为:%d\n", n); } return 0; }
上面那种方法比较好理解,但代码陈杂,太长。第二种方法:
但要明确一个知识点:
4 % 5 == 4; //一个小的数对一个大的数求余等于它本身。 5 % 4 == 1; //这个就不用说了!
看代码!:利用交换法。
#include<stdio.h> int main(){ int m, n, x, y,z; scanf_s("%d%dPlease input two number:", &m, &n); x = m; y = n; while (y != 0) { //当y == 0时,跳出循环 z = x % y; //交换法 x = y; y = z; } printf("它们的最大公约数为:%d\n", x); printf("它们的最小公倍数为:%d\n", (m*n) / x); return 0; }