目录
题目(后文为方便读者阅读 将补充题目项目)
基础知识补充:
如果int 类型溢出的话 建议更换long long类型 可用范围更大。long long需要%lld这种格式字符
最大公约数*最大公倍数 = m*n(原来的两个数)
思路:
方法一:首先判断二者之间的较小值是否为最大公约数 如果不是逐步减小 直到找出最大公约数 并算出最大公倍数 求和 (复杂度过大)//不推荐 但下文也有源代码
方法二:
辗转相除求出最大公约数 继而求出最大公倍数 求和
辗转相除的实现
1.创建一个变量 c 接收 m 和 n 的余数 (n 作为最大公约数)
2.将 m 的值 赋给 n ; 将 n 的值 赋给c (即使出现m 小于 n 的情况 也会在一次循环之后实现交换)
3.有使循环结束的条件 - 找到最大公约数 -- 余数为0
最终代码:
方法一:
#include<stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &m, &n);
int max = (n > m ? m: n);//假设最大公约数是二者的较小值
while (1)
{
if (n % max == 0 && m % max == 0)
{
break;
}
max--;
}
int min = (n > m ? n : m);//假设最小公倍数是n和m的较大值
while (1)
{
if (n % max == 0 && m % max == 0)
{
break;
}
min++;
}
return 0;
}
方法二:
#include<stdio.h>
int main()
{
long long m = 0;
long long n = 0;
scanf("%lld %lld", &m, &n);
long long c = 0;
long long ret1 = m;//留存最原始的m n
long long ret2 = n;
while (c = m % n)
{
m = n;
n = c;
}
long long y = n;
long long b = ret1 * ret2 / y;
printf("%lld", y+b);
return 0;
}