Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的欧几里德算法(减法)_Python_Algorithm_Subtraction_Greatest Common Divisor - Fatal编程技术网

python中的欧几里德算法(减法)

python中的欧几里德算法(减法),python,algorithm,subtraction,greatest-common-divisor,Python,Algorithm,Subtraction,Greatest Common Divisor,伊恩·斯图尔特在第18页的《伟大的数学问题——无限的愿景》中提到了欧几里德的命题2,元素第七卷,这是一种寻找最大公约数的非常基本的方法。我引述“它的工作原理是重复地从较大的数字中减去较小的数字,然后对得到的余数和较小的数字应用类似的过程,并继续进行,直到没有余数。”示例是630和135。135从630(495360225)中重复“减去”,最后得到小于135的90。所以数字被颠倒,然后从135中反复减去90,最后得到45。然后从90中减去45,最后得到0,即gcd为45。这有时被称为寻找gcd的欧

伊恩·斯图尔特在第18页的《伟大的数学问题——无限的愿景》中提到了欧几里德的命题2,元素第七卷,这是一种寻找最大公约数的非常基本的方法。我引述“它的工作原理是重复地从较大的数字中减去较小的数字,然后对得到的余数和较小的数字应用类似的过程,并继续进行,直到没有余数。”示例是630和135。135从630(495360225)中重复“减去”,最后得到小于135的90。所以数字被颠倒,然后从135中反复减去90,最后得到45。然后从90中减去45,最后得到0,即gcd为45。这有时被称为寻找gcd的欧几里德算法

为了教初学者(一个10岁的孩子),我需要用python编写代码。不应该有任何函数定义,也不应该使用除减法以外的任何其他数学运算。我想使用if/while/else/elif/continue/break。应规定,如果给出三个(或更多)数字,则必须重复整个程序,以确定较小的一个。
早期的gcd链并没有从这个角度看待算法

gcd算法的典型快速解决方案是这样的迭代版本:

def gcd(x, y):
    while y != 0:
        (x, y) = (y, x % y)

    return x
事实上,在python中,您只需直接使用模块提供的gcd函数

如果您想让该函数处理多个值,只需使用reduce:

reduce(gcd,your_array)
现在,您似乎想限制自己只使用循环+减法,因此处理x,y正整数的一个可能解决方案是:

def gcd_unopt(x, y):
    print x,y

    while x!=y:
        while x>y:
            x -= y
            print x,y
        while y>x:
            y -= x
            print x,y

    return x

print reduce(gcd_unopt,[630,135])
不确定为什么要避免使用函数,gcd是一个定义为函数的函数,即使如此,这很简单,只需去掉函数声明并将参数用作全局变量,例如:

x = 630
y = 135

print x,y

while x!=y:
    while x>y:
        x -= y
        print x,y
    while y>x:
        y -= x
        print x,y

我相信在Python中有数千种(扩展的)欧几里德算法的实现。你查了哪些?它们怎么了?嗯,
gcd
(以及
sin
cos
max
min
,等等)应该是一个函数。在数学中,你写的是
gcd(1,3,5)
,这只是一个函数调用。我提到了我对算法的具体要求——不管它叫什么名字。我坚持这样做是因为教学方面的原因。我找不到符合条件的。关于“除法”而不是第一段中提到的“减法”的问题。如果能提供任何参考,我会很高兴的——安德里亚·科尔贝利尼桑克斯。但是,程序只返回输入的值。此外,这是否意味着如果不使用我最初的意图中的“函数定义”,这个简单的算法就无法在python中实现?在C语言中,这可以用几行嵌套的两行来完成,而我已经编辑了我的注释。但不确定“程序只返回输入的值”是什么意思。在任何情况下,答案都会提供一些打印,向孩子展示未优化的算法是如何执行的。谢谢BPL。它符合我的目的,确实提供了更多。@Biplab请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案,并接受你提出的任何问题的最有用的答案(这也会给你的声誉带来一点提升)