返回信息流中科院笔试题:
给定两个自然数,不需使用乘除法,这个运算函数是什么思路?
这是一条镜像帖。来源:北邮人论坛 / cpp / #47082同步于 2010/11/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【球思路】求最小公倍数,不许用乘除法
blove
2010/11/30镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
a,b最小公倍数==a*b/gcd(a,b),gcd(a,b)是a,b的最大公约数。a*b,不用乘法也很好做吧,gcd(a,b)用辗转相除法的思想,也可以不用乘除法:
int gcd(int a,int b)
{
while(a!=b)
{
if(a>b)
{
a = a-b;
}
else if(a<b)
{
b = b-a;
}
}
return a;
}
【 在 jiangnanbuyi 的大作中提到: 】
: a,b最小公倍数==a*b/gcd(a,b),gcd(a,b)是a,b的最大公约数。a*b,不用乘法也很好做吧,gcd(a,b)用辗转相除法的思想,也可以不用乘除法:
: int gcd(int a,int b)
: {
: ...................
a*b这个用移位和加法操作?不知道这个移位算不算在要求里面。。
谢大牛了
【 在 jiangnanbuyi 的大作中提到: 】
: a,b最小公倍数==a*b/gcd(a,b),gcd(a,b)是a,b的最大公约数。a*b,不用乘法也很好做吧,gcd(a,b)用辗转相除法的思想,也可以不用乘除法:
: int gcd(int a,int b)
: {
: ...................
学习了。。还真不知道有这么一个求最小公倍数的公式和这么一种求最大公约数的方法。。
【 在 jiangnanbuyi 的大作中提到: 】
: a,b最小公倍数==a*b/gcd(a,b),gcd(a,b)是a,b的最大公约数。a*b,不用乘法也很好做吧,gcd(a,b)用辗转相除法的思想,也可以不用乘除法:
: int gcd(int a,int b)
: {
: ...................
[em17][em17][em17][em17]
你这还不是用了乘除法求的公倍数,还有gcd这么求也不是最优的
【 在 jiangnanbuyi 的大作中提到: 】
: a,b最小公倍数==a*b/gcd(a,b),gcd(a,b)是a,b的最大公约数。a*b,不用乘法也很好做吧,gcd(a,b)用辗转相除法的思想,也可以不用乘除法:
: int gcd(int a,int b)
: {
: ...................
这个很好理解,最大公约数就是a和b能同时除掉的最大数。a/(最大能共除的数)必然与b互素。a*b
/(最大公约数)就是最小公倍数了。
【 在 dyrdyr 的大作中提到: 】
: 学习了。。还真不知道有这么一个求最小公倍数的公式和这么一种求最大公约数的方法。。
: 【 在 jiangnanbuyi 的大作中提到: 】
: : a,b最小公倍数==a*b/gcd(a,b),gcd(a,b)是a,b的最大公约数。a*b,不用乘法也很好做吧,gcd(a,b)用辗转相除法的思想,也可以不用乘除法:
: ...................