zoukankan      html  css  js  c++  java
  • 欧几里得算法

    什么是GCD? 
    GCD是最大公约数的简称(当然理解为我们伟大的党也未尝不可)。在开头,我们先下几个定义: 
    ①a|b表示a能整除b(a是b的约数) 
    ②a mod b表示a-[a/b]b([a/b]在Pascal中相当于a div b)
    ③gcd(a,b)表示a和b的最大公约数 
    ④a和b的线性组合表示ax+by(x,y为整数)。我们有:若d|a且d|b,则d|ax+by(这很重要!)

    欧几里得算法又称为辗转相除法,设两个数 a,b则 a,b的最大公约 gcd(a,b)=gcd(b,a%b) 不妨设 a>=b,c=gcd(a,b),a=kc,b=jc,则 k,j 互素(否则 c 不是 a,b 的最大公约数) ,则设r=a%b 则 a=mb+r, 则 r=a-mb=kc-mjc=(k-mj)c, 因为 k,j 互素,则 k-mj 与 j 互素gcd(a,b)=gcd(b,a%b)

     1 //非递归版,C语言实现 
     2 int gcd(int a,int b) 
     3 { 
     4     if(!a) 
     5       return b; 
     6     int c; 
     7     while(b) 
     8     { 
     9         c=b; 
    10         b=a%b; 
    11         a=c; 
    12     } 
    13     return a; 
    14 } 
    1 //递归版,C语言实现 
    2 int gcd(int a,int b) 
    3 { 
    4  if(b==0) 
    5    return a; 
    6  return gcd(b,a%b); 
    7 } 

     一般很少有题目只要求最大公约数,但是通常很多题会用到求最大公约数的过程,比如判断两个数是否互素(最大公约数为 1) ,这个时候欧几里得算法暨辗转相除法就变成了很得力的工具,因为每一步都是取模,保证了数据减小的速度特别快。能够在很短的时间内求出两个数的最大公约数。

  • 相关阅读:
    php 获取文件信息相关基础函数
    php常用基础数组函数
    php数组指针相关函数
    php 常用基础数学函数
    php 基本的常用字符串函数
    php 函数返回问题
    iframe 插入内容 (转)
    [OFFICE]如何查看OFFICE是否是永久激活
    [C语言]变量的声明和定义有什么区别
    [算法]快速判断一个数是否是2的幂次方
  • 原文地址:https://www.cnblogs.com/vivider/p/3650541.html
Copyright © 2011-2022 走看看