九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(5)欧几里得算法欧几里得算法求最大公约数

  一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记

用C++/lua/python/bash的四重实现(5)欧几里得算法求最大公约数

write by** 九天雁翎(JTianLing) –
blog.csdn.net/vagrxie
**

 

«Data Structures and Algorithm Analysis in C++»

--《数据结构与算法分析c++描述》 Mark Allen Weiss著 人民邮电大学出版 中文版第45面,图2-10欧几里得算法

欧几里得算法求最大公约数好像也比较出名,起码各大算法书籍都喜欢用,可能因为说明简单,却能够说明问题。

这里突然想说一句,当bash老是用C语法部分来完成也就没有那么难的变态了,只是,可能多了一点投机的成分。

再来个截图,下次再截就成惯例了。

从左自右依次是cpp,lua,python,bash。

write by 九天雁翎(JTianLing)
-- www.jtianling.com

以下为实现部分:

CPP:

#include <stdio.h>
#include <stdlib.h>

**long**  gcd(**long**  m, **long**  n)
{
    **if**(m < n)
    {
        **long**  temp = m;
        m = n;
        n = temp;
    }
    **while**( n != 0)
    {
        **long**  rem = m % n;
        m = n;
        n = rem;
    }

    **return**  m;
}

**int**  main(**int**  argc, **char** * argv[])
{
    printf("gcd(1989,1590)=%ld/n",gcd(1989,1590));
    printf("gcd(1590,1989)=%ld/n",gcd(1590,1989));
    exit(0);
}

LUA:

#!/usr/bin/env lua

function gcd(m,n)
    **if**  m < n **then**
        m,n = n,m
    **end**

    **while**  n ~= 0 **do**
        rem = m % n
        m = n
        n = rem
    **end**

    **return**  m
end

-- Test code
print("gcd(1989,1590)=" .. gcd(1989,1590))
print("gcd(1590,1989)=" .. gcd(1590,1989))

PYTHON:

#!/usr/bin/env python

**def**  gcd(m,n):
    **if**  m < n:
        m,n = n,m

    **while**  n != 0:
        rem = m % n
        m = n
        n = rem

    **return**  m

**def**  test():
    **print**  "gcd(1989,1590)=" + str(gcd(1989,1590))
    **print**  "gcd(1590,1989)=" + str(gcd(1590,1989))

**if**  __name__ == '__main__':
    test()

BASH:

#!/usr/bin/env bash

gcd()
{
    m=$1
    n=$2
    **if**  (( m < n ))
    then
        (( temp = m ))
        (( m = n ))
        (( n = temp ))
    fi

    **while  **(( n != 0 ))
    do
        (( rem = m % n ))
        (( m = n ))
        (( n = rem ))
    done

    **return**  $m
}

# test code
**echo**  -n  " gcd(1989,1590)="
gcd 1989 1590
**echo**  $?
**echo**  -n  " gcd(1590,1989)="
gcd 1590 1989
**echo**  $?

write by** 九天雁翎** (JTianLing) – www.jtianling.com

分类:  Lua  Python  算法 
标签:  Bash  C++  Lua  Python  《数据结构与算法分析-C++描述》  最大公约数  欧几里德算法 

Posted By 九天雁翎 at 九天雁翎的博客 on 2008年11月28日

前一篇: 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(4)二分搜索算法 后一篇: 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(6)高效率的幂运算