`
luoping0425
  • 浏览: 109061 次
  • 性别: Icon_minigender_2
  • 来自: 赣州
文章分类
社区版块
存档分类
最新评论

算法,求公约数

阅读更多
  最近的一次面试中,因为遭遇一次很简单的算法问题(一个冒泡法排序),做了很久。觉得自己一下信心就下去了,还在求职中,觉得算法还是很重要的,能让人有更好更快的思维能力,能提高coding的效率,所以去图书馆借了一本算法设计与分析。对自己的要求是每天一个算法,发表在javaeye上,以监督自己。

  10.5 求两个正整数的最大公约数。
  数学模型:a、b>0,均为整数,求c,c能整除a、b,且a/c与b/c互质(没有公约数)。

  解决过程:“短除法”,逐步找除两个数的所有公约数,再将这些公约数相乘,得到的积就是两个数的最大公约数。

  用ruby实现:
a = 81
b = 27
t = 1
i = 2

while i<=a && i<=b
  if a%i==0 && b%i==0
    t = t*i
    a = a/i
    b = b/i
  end
  i= i+1
end

puts t   # 27


整理为函数:
def common_divisor(a, b)
  t = 1
  i = 2

  while i<=a && i<=b
    if a%i==0 && b%i==0
      t = t*i
      a = a/i
      b = b/i
    end
    i= i+1
  end
  
  return t
end

puts common_divisor(81, 27)  # 27

分享到:
评论

相关推荐

    欧几里德算法求最大公约数——C++代码

    欧几里得算法,也称为辗转相除法,是计算两个正整数最大公约数(Greatest Common Divisor, GCD)的一种经典方法。该算法基于以下原理:两个正整数a和b(a&gt;b)的最大公约数等于a除以b的余数c和b之间的最大公约数。...

    求最大公约数最小公倍数的3种算法的流程图

    本主题主要关注求最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的三种常见算法,通过流程图的方式进行阐述。下面我们将详细探讨这五种算法及其流程。 1. 辗转相除法...

    欧几里得算法求最大公约数

    用欧几里得算法求最大公约数的c++代码,很完整,可以运行

    利用三种算法求最大公约数

    在计算机科学和编程领域,求解最大公约数(Greatest Common Divisor,GCD)是一项基本的任务,它在数学和算法设计中具有广泛的应用。本文将深入探讨三种不同的方法来计算两个整数的最大公约数:分解质因数法、连续...

    基础算法-python求最大公约数和最小公倍数

    python求最大公约数和最小公倍数 #辗转相除法 def gcd(a,b): #最大公约数函数,且最小公倍数 = 两个数相乘 / 最大公约数 if b == 0: return a else: return gcd(b,a%b) print("请输入两个数:") j,k = input()....

    计算最大公约数和最小公倍数的常见算法

    计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小公倍数的常见算法计算最大公约数和最小...

    Verilog求最大公约数

    这个算法基于这样一个原理:对于任何两个正整数a和b(假设a&gt;b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。如果余数为0,则b就是最大公约数;否则,继续这个过程,用b去除以余数c,如此反复,直到...

    最大公约数算法

    欧几里得算法是求最大公约数最古老的算法,由古希腊数学家欧几里得提出。该算法基于以下定理:对于任意两个正整数a和b(a&gt;b),它们的最大公约数等于a除以b的余数c与b之间的最大公约数。通过不断迭代这一过程,直到...

    c++求最大公约数

    有关c++求最大公约数的代码,用的是辗转相除法,很简单的算法过程,主要是求最大公约数

    C语言求最大公约数和最小公倍数算法总结

    C语言求最大公约数和最小公倍数算法总结 C语言中求最大公约数和最小公倍数的各种算法总结,包括辗转相除法和穷举法等。辗转相除法又名欧几里德法,是一种经典的算法,用于计算两个正整数的最大公约数和最小公倍数。...

    设计出3个版本的求最大公约数的算法

    求最大公约数的算法有多种实现方式,这里我们将详细探讨三种不同的版本,并对它们进行大O符号的时间复杂性分析。同时,我们还将讨论如何通过计数法和计时法来实际测试这些算法的运行性能。 **版本一:欧几里得算法*...

    Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例

    在编程中,最大公约数的计算尤其重要,因为它可以作为算法优化的手段,例如在约分分数、计算同余方程、优化组合数学中的多项式等问题中发挥作用。而最小公倍数则常用于求解周期性问题或找到两个数的公共周期。 在...

    java语言实现的欧几里得算法,求最大公约数,以及满足(a,b)=x*a+y*b的x和y

    java语言实现的欧几里得算法,求最大公约数,以及满足(a,b)=x*a+y*b的x和y

    欧几里得算法最大公约数1

    欧几里得算法最大公约数1 欧几里得算法是一种常用的算法,用来计算两个整数之间的最大公约数(Greatest Common Divisor,GCD)。该算法的时间复杂度为 O(log n),是一种高效的算法。 在上述代码中,我们可以看到,...

    算法分析求最大公约数

    【算法分析求最大公约数】涉及的是在编程领域中如何高效地找到两个正整数的最大公约数(Greatest Common Divisor, GCD)。本实验旨在通过C++编程语言,设计并分析不同算法的效率,同时结合时间复杂性的理论进行实际...

    用辗转相除法求最大公约数

    根据给定的信息,我们可以提取并总结出以下与“用辗转相除法求最大公约数”相关的知识点: ### 1. 辗转相除法(欧几里得算法)原理 辗转相除法是一种用于计算两个正整数最大公约数(Greatest Common Divisor, GCD...

    求最大公约数

    连续整数检测法求最大公约数算法步骤 - 输入两个正整数m和n。 - 初始化t为较小的那个数。 - 从t开始向下递减直到1。 - 检查t是否能同时被m和n整除: - 如果不能,则继续递减t; - 如果可以,则输出t并结束程序。 ...

    用递归算法实现两个整数最大公约数的计算

    这种设计遵循了欧几里得算法的逻辑,通过不断将问题规模缩小,最终达到基线条件,从而求出最大公约数。 ### 总结 通过上述分析,我们可以看到递归算法在解决数学问题,特别是最大公约数计算上的应用。递归不仅简化...

    输入两个整数求最大公约数三种算法C语言

    欧几里得算法是计算最大公约数的经典方法,基于以下原理:对于任意两个正整数a和b(a&gt;b),它们的最大公约数等于a除以b的余数c与b之间的最大公约数。反复应用这个原理,直到余数为0,此时b即为最大公约数。 ```c ...

    求最大公约数的三种算法

    文档中包含了分别用欧几里德算法, 穷举算法, 递归算法求最大公约数的方法, 并包含了测试函数, 测试数据. 测试数据选择了斐波那契数从1开始的19组相邻的数据. 实验中, 由于运算时间很短, 故对时间进行放大,即:对于每...

Global site tag (gtag.js) - Google Analytics