很经典的一道题,我们来直接看题目
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
此题的解法有暴力,辗转相除,辗转相减三种
这里为了简洁,我只介绍后两种。
第一种:辗转相减:
首先,上个百度百科:辗转相减法(求最大公约数),即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)->(7,7),再做一次相减,结果为0,这样也就求出了最大公约数7
完了,文字很多看不懂不想看,咋办?
简单,我来告诉你思路:
先比较两数字大小,得出大的数和小的数
第二步:大数=大数-小数(大数此时已经更新了)
第三步:再次比较两数字大小,得出大的数和小的数
第四步:大数=大数-小
。
。
直至结果相减结果为0时结束,
此时的两数字已经相等,这时的数字即是最大公约数
利用此思路我们解决下这题:
#include<stdio.h>
int main()
{
int a