求最大公约数的算法(需要考虑测量误差)

My_Love 2012-01-17 05:19:08
如639, 481=〉160 (159,161也可以)
假定误差较小为+/-M.
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
辗转相除法。
2个数,不断求余,直到整除后,最后那个除数就是了。
arfi 2012-01-18
  • 打赏
  • 举报
回复
不过,楼主你是怎么推出 639, 481 的最大公约数是 160 的?
arfi 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnmhx 的回复:]
辗转扣除,行不行?
[/Quote]

++

int gcd(int a, int b)
{
int r;
while(b)
{
r = a%b;
a = b;
b = r;
}
return a;
}

My_Love 2012-01-18
  • 打赏
  • 举报
回复
有没有优化点的算法?
  • 打赏
  • 举报
回复
说个比较笨的方法:

如果M的范围不大的话,那么就枚举所有可能。例如M=2,那么允许的两个数的范围就是:
[639-2,639+2] [481-2,481+2]
那么每个数有5种取值,一共有5*5=25种组合。对25种组合分别求GCD,选最大那个。
cnmhx 2012-01-17
  • 打赏
  • 举报
回复
辗转扣除,行不行?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧