如何用Euclid的算法制作程序来计算gcd,分割数和不同商数?

时间:2016-05-08 04:44:53

标签: python-3.x

我是Python的初学者。 我正在尝试使用Euclid算法编写程序。 问题是我不知道如何制作这个节目: 该计划的灵感来自以下观察。由欧几里德算法产生的用于计算GCD(a,b)的形式a = b * q + r的行数不遵循可预测的模式。  我们要说的是,如果计算的GCD大于1,则算法的执行比另一个更有趣,需要更多的划分,并且产生的中间商是高度可变的。 例如,在计算gcd(13,8)时获得:

  Enter the minimum value range >=2:  100
  Enter the maximum value range >=3:  200
  Enter the minimum value of GCD: 3
  Enter the minimum number of divisions: 5
  Enter minimum number of different quotients: 4
  GCD (156, 129) = 3, divisions: 5, different quotients: 4   
  GCD (159, 126) = 3, divisions: 5, different quotients: 4
  GCD (171, 141) = 3, divisions: 5, different quotients: 4
  GCD (177, 135) = 3, divisions: 5, different quotients: 4
  GCD (177, 144) = 3, divisions: 5, different quotients: 4
  GCD ( 183 , 126 ) = 3 , divisions: 5 , different quotients: 4
  GCD ( 183 , 135 ) = 3 , divisions: 5 , different quotients: 4
  GCD ( 183 , 141 ) = 3 , divisions: 5 , different quotients: 4
  GCD ( 183 , 144 ) = 3 , divisions: 5 different quotients: 4
  GCD (183, 156 ) = 3 , divisions: 5 different quotients: 4
  GCD (186, 129 ) = 3 , divisions: 5 , different quotients: 4
  GCD (189, 150) = 3, divisions: 5 different quotients: 4
  GCD (192, 141) = 3, divisions: 5, different quotients: 4

我想在用户给出的自然数区域中找到有趣的案例。为此,程序将询问该区域的最小范围的值,该值应该> = 2,该区域的最大范围的值,其必须> 1。 = 3,所需GCD的最小值,也是所需的最小分割数和不同商的最小数量。 总而言之,我想编写一个实现函数ngcd(a,b)的程序,该函数通过欧几里德算法计算a和b的最大公约数。此外,此函数计算执行期间的其他度量。具体来说,该函数计算a和b的gcd,分割数(a = b * q + r形式的行)和调用期间生成的不同商数。

我正在尝试做的一个例子是:

public static void main (String[] args) {
    NewClass test = new NewClass();
    // int[] tempArray = {1, 2, 3};
    // test.doSomething(tempArray);
    test.doSomething({1, 2, 3});
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不知道您是否被允许使用内置的from fractions import gcd如果您应该非常简单image

有两种方法,递归和迭代,通常递归函数更清晰,性能更好,因此你可以这样实现:

递归:

def gcd(u, v):
return gcd(v, u % v) if v else abs(u)

它应该至少在数学部分给你一个想法。