for(z=0; z<10000000; z++) 循环只是为了增加程序的运行时间,

让我们体会算法的时间复杂度。

算法一:短除法

想法,采用短除法找出2个数的所有公约数,将这些公因子相乘,结果就是2个数的最大公约数。【找公因子,只能使用蛮力法】

#include

#include

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

for(z=0; z<10000000; z++)

{

for(i=2;i<=m&&i<=n;)

{

while(m%i==0&&n%i==0)

{

f*=i;

m/=i;

n/=i;

}

i++;

}

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

算法二:辗转相除法

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

#include

#include

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

for(z=0; z<10000000; z++)

{

if(m

{

i=m;

m=n;

n=i;

}

i=m%n;

while(i)

{

m=n;

n=i;

i=m%n;

}

f=n;

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

time=0.037000 seconds

result=4

Press any key to continue

算法三:蛮力法,从2个公约数中较小的数开始递减,二个公约数除以它,可以同时除尽,变是最大公约数,我想的,很笨的一种。

#include

#include

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

for(z=0; z<10000000; z++)

{

f=m>n?n:m;

for(i=f;i>0;i--)

{

if(m%i==0&&n%i==0)

{

f=i;

break;

}

}

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

time=0.992000 seconds

result=4

Press any key to continue

算法四:辗转相减法

辗转相减法是一种简便的求出两数最大公约数的方法。(更相减损术)辗转相减法(求最大公约数),即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)->(7,7),再做一次相减,结果为0,这样也就求出了最大公约数7

#include

#include

void exchange(int *m,int *n);

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

if(m

exchange(&m,&n);

for(z=0; z<10000000; z++)

{

i=m-n;

while(i)

{

if(i>n)

{

m=i;

}else

{

m=n;

n=i;

}

i=m-n;

}

f=m;

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

void exchange(int *m,int *n)

{

int temp;

temp=*m;

*m=*n;

*n=temp;

}

time=0.020000 seconds

result=4

Press any key to continue

看看4个算法的运行时间,还是我自己想的算法时间最久,来一个

大神拯救我吧。

最大公约数简便算法_求最大公约数的4种算法相关推荐

  1. 最大公约数简便算法_求最大公约数的几种算法

    给定两个整数,求出这两个整数的最大公约数是我们从小就接触过的问题,但是我们如何用更简洁的算法来计算呢? 本文中,假定这两个整数是m和n且m>=n>=0.让我们从最简单的算法说起! 一.Co ...

  2. c语言用质因数分解法求最大公约数,分解质因数法求最大公约数(javascrip实现)

    //判断是否为质数------------------------------------------------------ function isPrime(n) { for (var i = n ...

  3. java 直线交点_[Java教程]谈谈求线段交点的几种算法(js实现,完整版)

    [Java教程]谈谈求线段交点的几种算法(js实现,完整版) 0 2014-08-27 10:05:22 "求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面 ...

  4. js求两圆交点_谈谈求线段交点的几种算法(js实现,完整版)

    "求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法总结一下, 希望对大家有所帮助. ...

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

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

  6. 辗转取余数php算最小公约数,(算法)求最大公约数和最小公约数

    最大公约数定义: 最大公约数(最大公因数)就是几个数公有的因数中最大的一个. 最小公倍数定于: 最小公倍数就是几个数公有的倍数中最小的一个. 求最小公倍数的算法:(两个数的乘积/最大公约数) 求最大公 ...

  7. mysql最大公约数函数_求最大公约数和最小公倍(PHP)

    求最大公约数和最小公倍(PHP) 用程序求最大公约数和最小公倍数最容易想到的方法如下: //求最大公约数 function max_divisor($a, $b) { $n = min($a, $b) ...

  8. C语言求35 45的最大公约数,C语言怎么求最大公约数和最小公倍数

    #3 段梦超2009-12-20 21:31 输入两个正整数m和n, 求其最大公约数和最小公倍数. <1> 用辗转相除法求最大公约数 算法描述: m对n求余为a, 若a不等于0 则 m 最 ...

  9. linux求最大公约数视频,C语言求最大公约数代码及解析

    问题描述 从键盘输入两个整数,求任意两个正整数的最大公约数(GCD). 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b, ...

最新文章

  1. android使用桢布局,Android性能优化UI篇
  2. 在Python中操作文件之truncate()方法的使用教程
  3. java 桥接模式_JAVA设计模式之【桥接模式】
  4. keycloak 调研资料
  5. onesignal php,PHP FPM源代码反刍品味之五:信号signal处理
  6. 献给 Python 开发人员的 25 个最佳 GitHub 代码库!
  7. 笔记:区分文件头lang=”zh”和lang=”zh-cn”的使用??
  8. Python定时任务-schedule vs. Celery vs. APScheduler
  9. 一篇文章学会CORS
  10. linux查看ps进程命令,linux ps查看进程命令
  11. python 自动执行 apdl_在高效的mann中从Python运行ANSYS Mechanical APDL
  12. 松下FP系列PLC以太网通讯
  13. antd-select拼音首字母模糊查询
  14. markdown编辑器示范
  15. Android内存优化汇总
  16. 平面设计色彩搭配,让设计大放异彩
  17. 协作通信关键技术(王辉)阅读心得
  18. MongoDB副本集部署
  19. 【强化学习实战-04】DQN和Double DQN保姆级教程(2):以MountainCar-v0
  20. 初入职场|入门互联网产品经理

热门文章

  1. 内置对象和内置函数_内置假对象
  2. 在Java中将时间单位转换为持续时间
  3. 反应型关系数据库事务
  4. 变异测试 java_编码的喜悦……以及Java中的变异测试
  5. 更快地重复访问Java的Java类名?
  6. Java 11将包含更多功能
  7. java堆内存和堆外内存_Java堆空间,本机堆和内存问题
  8. 代理的JavaOne 2016观察
  9. 法线有接缝_发送带有接缝的活动邀请
  10. tp框架 db::name_玩! 框架:为什么我会爱上它