美文网首页java 数据结构算法
java算法(一)欧几里得算法

java算法(一)欧几里得算法

作者: 过期的薯条 | 来源:发表于2017-05-14 22:45 被阅读74次

引言

我是一个1年android开发程序员,工作中遇到的问题不会就百度,再不会就问人,github上开源项目没得,okhttp这样流行的框架也不了解,算法也不会,写的代码自己都不想看。想想自己的确没得什么竞争力,所以决定今年主打俩本书,一本是java数据结构与算法你另外一本是代码的重构。阿里工程师说过一句话:"工程师对于代码,一定要“精益求精”,不论从性能,还是简洁优雅,都要具备“精益求精”的工匠精神,认真打"。这句话深深的对住了我的胃口。对 程序员就要这样。能写出一段高效,简洁,易懂的代码 真的不是容易事。废话不多说了,开始我的算法系列的博客,算是自己给自己的付出记录了一笔。为以后进军大公司做准备。

正题

欧几里得算法定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。
gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)。其中gcd(a,b)表示求a,b间的最大公约数。因此我们只要证明:
gcd(a,b) = gcd(b,a mod b) 那么这个定理就成立.(a>b且b>(a mod b))
证明过程如下:
设 a=kb+r。那么 r=a%b;r=a-kb。假设d 是a,b公约数。那么d|a,d|b。那么可以知道(a-kb)/d 也是能够除断的。即d|(a-kb)。即d|r。gcd(a,b)公约数为为d。那么d是不是gcd(b,a mod b)的公约数。很显然d也是gcd(b,a mod b)的公约数。说明gcd(a,b)=gcd(b,a mod b)成立。

代码实现:

/**
 * Created by wxy on 2017/5/14.
 * 欧几里得算法
 * 求俩个数的最大公约数
 */
public class FindGcd {
    public long gcd(long n, long n1) {
        while (n1 != 0) {
            long rem = n % n1;
            System.out.println(rem);
            n = n1;
            n1 = rem;
        }
        return n;
    }
    public static void main(String args[]){
        FindGcd findGcd=new FindGcd();
        findGcd.gcd(1989,1590);
        //System.out.println(findGcd.gcd(50,15));
    }
}

时间复杂度:n = O(log(N))

看吧算法的诱惑,假如不知道求最大公约数的算法,靠自己手写代码去解决,想想麻烦还不说,代码执行效率也不高。真正意义上体会到算法的魅力。也体会到数学对编程的帮助。(证明欧几里得算法,看了好几篇文章才懂)。出社会到现在高数老底都被啃光了。以后一边学习算法 一边恶补一下高数,

相关文章

  • 扩展欧几里得算法

    资料 欧几里得算法 扩展欧几里得算法 扩展欧几里得算法应用 欧几里得算法 欧几里得算法用于求两个数的最大公约数 证...

  • 算法学习(2)----丢番图方程

    之前一篇随笔"算法学习(1)----扩展欧几里得算法"记录了对朴素欧几里得算法和扩展欧几里得算法的学习和认识...

  • java算法(一)欧几里得算法

    引言 我是一个1年android开发程序员,工作中遇到的问题不会就百度,再不会就问人,github上开源项目没得,...

  • 扩展欧几里德算法

    扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)...

  • 扩展欧几里得算法

    扩展欧几里得算法(Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展...

  • GCD欧几里得算法 & EXGCD扩展欧几里得算法

    欧几里得算法欧几里得算法 (Euclidean algorithm) 是用来解决最大公约数问题的,通常采用辗转相除...

  • 2019-02-27 辗转相除(数学证明及算法)

    1.概述 辗转相除,又称欧几里得算法,用于求最大公约数Java实现如下: 这个算法实现很简单,但是这么难理解可是让...

  • 组合数求解

    扩展欧几里得算法原理求解逆元的方法(本文采用扩展欧几里得算法进行求解)求组合数的两种方法Lucas定理

  • 拓展欧几里得算法

    问题 求线性同余方程ax+by=c的整数解 思路 首先介绍下欧几里得算法的原理,众所周知,欧几里得算法是辗转相除法...

  • 数论——欧几里得算法

    欧几里得算法 介绍 【欧几里得算法】又名辗转相除法,是求最大公约数的算法。两个整数的最大公约数是能够同时整除它们的...

网友评论

    本文标题:java算法(一)欧几里得算法

    本文链接:https://www.haomeiwen.com/subject/cckcxxtx.html