题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
公式法:最小公倍数=(m * n )/max(gys)
#include<stdio.h>
//最小公倍数
int main() {
int minMultiple, m, n;
scanf("%d %d", &m, &n);
if (m > n) minMultiple= m;
else minMultiple = n;
while (1)
{
if (minMultiple %m == 0 && minMultiple %n == 0) {
printf("%d and %d the minMultiple is %d", m, n, minMultiple);
break;
}
minMultiple++;
}
return 0;
}
执行结果
公式法
//通过最大公约数计算,公式计算:用两个数的积除去最大公约数得出它们的最小公倍数:m*n/max(gys)
void getGongbeishu1(int m, int n){
int minMultiple;
int gys = getGongyueshu2(m,n);
minMultiple = m * n/gys;
printf("%d and %d min minMultiple=%d\n", m, n, minMultiple);
}
求两数的最大公约数
分析:如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。
比如:
12、16的公约数有1、2、4,其中最大的一个是4,则4是12与16的最大公约数。
12、18的公约数有1、2、3、6,其中最大的一个是6,则6是12与18的最大公约数。
void getGongyueshu(int m, int n){
int gys;
//暴力解决
for(int i=1; i<= m && i<=n; i++) {
if (m%i==0 && n%i==0) {
// printf("gys i=%d\n", i);
gys = i;
}
}
//printf("max gys=%d\n", gys);
// getGongyueshu1(12,18);
printf("%d, %d max gys=%d\n", m, n, getGongyueshu2(m,n));
}
//while
void getGongyueshu1(int m, int n){
while (m != n)
{
if (m > n) {
// m=12 - 6 = 6
m-=n;
printf("m - n\n");
} else{
// n = 18-12=6;
n-=m;
printf("n - m\n");
}
}
printf("max gys=%d\n", m);
}
//使用递归
int getGongyueshu2(int m, int n){
if(n != 0) {
printf("%d yu %d yu=%d\n",m,n, m%n);
return getGongyueshu2(n, m%n);
} else {
return m;
}
}
递归实现求最大公约数
int gcb(int a, int b) {
if (b == 0) {
return a;
}
return gcb(b, a%b); // 48 36 48%36 = 12 36%12 = 0 12 0
}
int main()
{
int num1 =48, num2=36;
int result = gcb(num1, num2);
printf("%d", result);
return 0;
}
运行结果: