Greatest Common Divisor(GCD)

欧几里得算法据说是最早的算法,用于计算最大公约数,也是数论的基础算法之一。

这里给出使用欧几里得算法求最大公约数的递归和非递归的程序,同时给出穷举法求最大公约数的程序。

从计算时间上看,递推法计算速度最快。

程序中包含条件编译语句用于统计分析计算复杂度。

/** 计算两个数的最大公约数三种算法程序*/#include <stdio.h>//#define DEBUG
#ifdef DEBUG
int c1=0, c2=0, c3=0;
#endifint gcd1(int, int);
int gcd2(int, int);
int gcd3(int, int);int main(void)
{int m=42, n=140;printf("gcd1: %d %d result=%d\n", m, n, gcd1(m, n));printf("gcd2: %d %d result=%d\n", m, n, gcd2(m, n));printf("gcd3: %d %d result=%d\n", m, n, gcd3(m, n));
#ifdef DEBUGprintf("c1=%d  c2=%d  c3=%d\n", c1, c2, c3);
#endifreturn 0;
}/* 递归法:欧几里得算法,计算最大公约数 */
int gcd1(int m, int n)
{
#ifdef DEBUGc1++;
#endifreturn (m==0)?n:gcd1(n%m, m);
}/* 迭代法(递推法):欧几里得算法,计算最大公约数 */
int gcd2(int m, int n)
{while(m>0){
#ifdef DEBUGc2++;
#endifint c = n % m;n = m;m = c;}return n;
}/* 连续整数试探算法,计算最大公约数 */
int gcd3(int m, int n)
{if(m>n) {int temp = m;m = n;n = temp;}int t = m;while(m%t || n%t){
#ifdef DEBUGc3++;
#endift--;}return t;
}

关键代码(正解):

/* 迭代法(递推法):欧几里得算法,计算最大公约数 */
int gcd(int m, int n)
{while(m>0){int c = n % m;n = m;m = c;}return n;
}

最大公约数GCD的三种算法程序相关推荐

  1. 51Nod-1011 最大公约数GCD【欧几里得算法】

    1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1& ...

  2. c语言求最小公倍数和最大公约数三种算法

    C语言求最小公倍数和最大公约数三种算法(经典) 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b ...

  3. C语言求最小公倍数和最大公约数三种算法(经典)

    C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...

  4. 三种方法求最大公约数及求n个数的最小公倍数

    一.三种方法求两个数的最大公约数 (1) 辗转相除法 辗转相除法求最大公约数是一种常用的求两个数的最大公约数的方法. 方法是: 以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除 ...

  5. 三种方法求最大公约数和最小公倍数

    最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个. 最大公约数有多种方法,常见的有质因数分解法.短除法.辗转相除法.更相减损法. java代码中实现了这三种算法 ...

  6. 最大公约数的三种求法——(C语言)

    如何求解最大公约数,首先了解什么是最大公约数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自 ...

  7. java 求最大公因数_求最大公约数的三种算法(java实现)

    三种算法: //欧几里得算法(辗转相除): public static int gcd(int m,int n) { if(m int k=m; m=n; n=k; } //if(m%n!=0) { ...

  8. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  9. c语言实现求最大公约数的三种方法

    一.最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也 ...

最新文章

  1. sqlalchemy 网页_抓取网页数据,上班也能看股票
  2. [导入][转]好企业是什么样?
  3. Docker:容器的四种网络类型 [十三]
  4. Altium Designer 使用小结
  5. java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...
  6. VTK:IO之3DSImporter
  7. numpy---one
  8. FFMPEG音视频解码
  9. k8s | 搞不明白为什么大家都在学习 k8s
  10. vs2008 64位 如何连接64位oracle,vs2008中如何连接服务器上Oracle实例?
  11. 剑指 Offer 55 - I. 二叉树的深度
  12. Win7家庭版启用Administrator账户
  13. 设计模式那点事读书笔记(3)----建造者模式
  14. 西门子224XP源码,包括pcb,原理图,224xp源码
  15. 盛大易宝只是陈天桥的梦而已
  16. 2020年了,Windows Me还能用吗?
  17. 打印机USB连接电脑后,共享给其他电脑
  18. Frank and Hall
  19. linux 安装ros软路由,Centos7安装RouterOS软路由
  20. python写圆柱的体积_继承实现圆柱体面积体积的计算

热门文章

  1. Comet:基于HTTP长连接的“服务器推”技术
  2. memcached构建高性能web应用
  3. .NET中加密和解密的实现方法
  4. C#使用SharpZipLib实现zip压缩
  5. payload的使 常用xss_跨站脚本XSS Payloads生成器
  6. debian 查看php版本,在debian 9中为php7.0-fpm启用状态查询
  7. freertos nand flash 读取错误_Flash失效小谈
  8. mysql大于等于怎么写_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...
  9. MTK和高通展讯他们平台的主要区别是什么
  10. OpenCV图像拼接之Stitching和Stitching_detailed