一、欧几里得算法

欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。

我们来用实际题目来探讨:如何求10和6的最大公约数?
1.将两数相除,求余数。10/6=1······4。
2.将除数和余数再进行求余运算。 6/4=1······2。
3.重复第二步直到余数为0。4/2=2······0 当余数为0时,被除数即为10和6的最大公约数。得出答案,10和6的最大公约数为2。

有了上述实现过程,那我们就可以用代码实现一遍了。上代码

    public int gcd(int p, int q) {
        if (q == 0) return p;//直到除数为0,那么我们就知道被除数就是我们要的答案了 
        int r = p % q;
        return gcd(q, r);
    }

  算法的复杂度我不会分析,看别人的解释我也看不懂,可能是我数学底子太差,有兴趣的可以自行研究下。

  例1:有两个容器A、B分别能装3升和5升水,还有个足够大的容器C,问能否往C中精确到出14升水?(仅能精确倒A3升,B5升,B装满5升之后倒出3升给A剩下2升,这是允许的操作)
分析题目可知我们可以倒的水为3升、5升、2升。列方程 3x+5y+2z=14。当存在xyz系数为整数等式成立的情况下就能倒出14升水!
我们暴力破解将数字一个一个代入进入
就能知道 2次5升加2次2升就能得到14升水。

  例2:接下来要用算法实现,任意容积的A,任意B,能否精确到出C升水?其中 0<A<B
设X1次A,X2次B,X3次(B-A)能够倒出C升水。
列方程:X1A+X2B+X3(B-A)=C X1X2X3为整数时,则能够准确倒出C升水。
化简方程:(X1-X3)
A+(X2+X3)*B=C
设x=X1-X3 y=X2+X3 得:
xA+yB=C
  假设x、y为正整数,我们用几个for循环暴力破解就能得到答案了,有没有更好的办法呢?答案肯定是有的,算法就是为了加速得出结果而生的。

扩展的欧几里德算法:
对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by.

  根据欧几里德扩展算法,Gcd(A, B) = Ax + By,x和y均为整数。求出A和B的最大公约数,如果C能被最大公约数整除Gcd(A, B) 整除,那就可以实现水缸里恰好为C升水;  那题目就直接转换为求A 、B的最大公约数了。
上述题目直接变成了:C如果能够被ab的最大公约数整除,答案则为能;不能整除,答案为不能。

上代码:

    public static Boolean can(int a, int b, int c) {
        //求出ab的最大公约数
        int gcd = gcd(a, b);

        if (0 == c % gcd)
            return true;
        return false;
    }
测试结果:
a=3 b=5 c=14,result=true
a=123 b=456 c=6543213,result=true
a=2 b=1000 c=1001,result=false

  以上就是欧几里得算法的体现。

  抛砖引玉,留下一个题:在平面上有一个两端无限延伸的数组如下图所示,0为起点,1是终点,现在你有四种走法,向正方向走a步,向负方向走a步,向正方向走b步,向负方向走b步。可以随便走多少次都可以!在任给两个数a,b问能否从起点走到终点。如图1


图1

  本系列所有的代码都会在github同步更新,立刻前往

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容