c++ - 2 个数的公因数是多少?

标签 c++ algorithm

通常我们会发现两个数字之间的公因数,例如 8 和 12 为 4。 但是在编程语言中,我想找到两个数都除以 2 时的公共(public)数。 我们将两个数字除以 2 并检查公共(public)数字 比如数字 8 和 11 8->4->2 11->5->2 她的我们得到2作为公共(public)号码。 我想为 10^9 以下的数字有效地实现它。 她的是我的实现

long long i,j;
while(i!=1||j!=1)
{
    i=i/2;
    j=j/2;
    if(i==j)
    flag=1;
    break;
}

但 i 和 j 在不同时间会相同。如何实现?

最佳答案

你可以用更复杂的逻辑来做到这一点——使用两个数字并始终除掉其中较大的一个:

int get(int a, int b) {
  while (a != b) {
    if (a < b) {
      swap(a, b);
    }
    a /= 2;
  }
  return a;
}

解释:最终任何正整数除以 2 都会得到 1,因此循环肯定会终止,最坏的情况是 ab 都是1. 在每一步中,我都确保 a 不小于 b,然后将其除以 2。

关于c++ - 2 个数的公因数是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22859892/

相关文章:

c++ - iOS 框架 : image not found

arrays - 大 2D 位矩阵内大小为 HxW 的最大子数组

c++ - 神秘的 oneliner 模板代码,任何一个?

python - 如何返回 Python 数组中目标元素的索引?

algorithm - 进化图像匹配模拟的新适应度测量

javascript - 从 1 个列表生成 2 种组合的算法

python - 用牛顿法求立方根

c++ - 鼠标离开控件时的 Windows 消息?

c++ - 类型特征以匹配不同类的成员函数的签名

c++ - 在vs2012中使用opencv加载和显示图像