一、链接
求最小公倍数
二、题目
Description | ||
有多个测试用例,每行两个正整数x,y,保证x*y不超过2^31-1。如果x与y都为0,则输入结束。 每行输出一个测试用例的结果,即x与y的最小公倍数。(最后一行有回车) | ||
Sample Input | ||
4 5 3 6 0 0 | ||
Sample Output | ||
20 6 | ||
Source | ||
ericxie |
三、题意
输入两个数,输出他们的最小公倍数
四、代码
c++代码
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
return b>0?gcd(b,a%b):a;
}
int main()
{
int x,y;
while(scanf("%d%d",&x,&y))
{
if(x==0&&y==0) return 0;
int res=x*y/gcd(x,y);
printf("%d\n",res);
}
return 0;
}
c代码
#include<stdio.h>
int gcd(int x,int y)
{
return y>0?gcd(y,x%y):x;
}
int main()
{
int x,y;
while(scanf("%d%d",&x,&y))
{
if(x==0&&y==0) return 0;
int res=x*y/gcd(x,y);
printf("%d\n",res);
}
return 0;
}
五、总结
1.最小公倍数=x*y/最大公约数
2.最大公约数使用辗转相除法来进行计算,被除数/除数=商......余数,辗转相除法是把除数当作被除数,把余数当作除数,不断进行辗转相除,直到余数等于0,取除数作为最大公约数
int gcd(int x,int y)
{
return y>0?gcd(y,x%y):x;
}
这样看其实比较抽象,举一个具体例子可以帮助理解,比如说30/16=1......14,16/14=1......2,14/2=7......0,最后的答案就是2
3.上面代码?的意思是什么:?是什么意思
判断问号之前的语句,如果为真就使用冒号前面的语句,如果为假就使用冒号后面的语句
4.相似的使用辗转相除法的还有这道题目: 湘大oj 1392 面积