算法设计:

方法一:

          第一种思路是枚举(穷举法、列举法),但是枚举又可以分为两种方法。第一种,采用穷举法按从小到大(初值为1,最大值为两个整数当中较小的数)的顺序将所有满足条件的公约数列出,输出其中最大的一个;第二种,按照从大(两个整数中较小的数)到小(到最小的整数1)的顺序求出第一个能同时整除两个整数的自然数,即为所求。

         代码示例如下:

#include <stdio.h>int main()
{int a, b;scanf("%d %d", &a, &b);//低版本编译器使用scanf 高版本编译器使用scanf_sint i;int gcd;gcd = 1;for(i = (a<b?a: b); i > 0; i--){if(a % i == 0 && b % i == 0){gcd = i;break;}}printf("gcd = %d\n", gcd);return 0;
}
#include <stdio.h>
int Get_Max_Comm_Divisor(int num1, int num2)
{int i = 0;//获取两个整数的最小值int min = num1 < num2 ? num1 : num2;//从两个数的最小值开始递减遍历for (i = min; i > 0; i--){//i为num1和num2的公倍数if (num1 % i == 0 && num2 % i == 0)break;}return i;
}int main()
{int num1 = 0, num2 = 0;puts("请输入两个正整数.");scanf_s("%d%d", &num1, &num2);printf("最大公约数为%d.\n", Get_Max_Comm_Divisor(num1, num2));return 0;
}

运行结果如下:

方法二:

          辗转相除法

1.如果b == 0,计算结束,a为最大公约数;

2.否则,计算a除以b的余数,让a等于b,而b等于那个余数;

3.返回第1步

代码示例如下:

#include <stdio.h>
int main(int argc, const char* argv[])
{int a;int b;int temp;scanf_s("%d %d", &a, &b);//低版本编译器使用scanf 高版本编译器使用scanf_swhile (b != 0){temp = a % b;a = b;b = temp;}printf("gcd = %d\n", a);return 0;
}

代码运行结果如下:

 方法三:

更相减损法

       1.求出两个正整数num1和num2的差值diff;

       2.将num2赋值给num1,让上次相减时的减数num2作为下次相减时的被减数。

          同时将当前的差值diff作为下次相减的减数。

          这样一直地辗转相减,直到差值为0,这时的除数num2就是我们要求的最大公因数

代码示例如下:

#include <stdio.h>
int Get_Max_Comm_Divisor(int num1, int num2)
{//两数相减的结果(取正值)int diff = num1 > num2 ? num1 - num2 : num2 - num1;while (diff != 0){num1 = num2;   //更新被减数num2 = diff; //更新减数diff = num1 > num2 ? num1 - num2\: num2 - num1; //更新两数相减的结果(取正值)}return num2;  //最后的减数即为最大公因数
}int main()
{int num1 = 0, num2 = 0;puts("请输入两个正整数.");scanf_s("%d%d", &num1, &num2);//低版本编译器用scanf 高版本编译器用scanf_sprintf("最大公约数为%d.\n", Get_Max_Comm_Divisor(num1, num2));return 0;
}

代码运行结果如下:

方法四:

Stein算法函数递归调用

#include "stdio.h"
#include <windows.h>
int gcd(int u, int v)
{if (u == 0)  return v;if (v == 0)  return u;if (~u & 1){if (v & 1)return gcd(u >> 1, v);elsereturn gcd(u >> 1, v >> 1) << 1;}if (~v & 1)return gcd(u, v >> 1);if (u > v)return gcd((u - v) >> 1, v);return gcd((v - u) >> 1, u);
}
int main()
{int z[2][20] = { {1,1},{31,43,46,65,43,58,55,54,55,56,98,78,96,54,78,85,57,12,36,15} };int i = 0;double run_time;LARGE_INTEGER time_start;   //开始时间LARGE_INTEGER time_over;  //结束时间double dqFreq;        //计时器频率LARGE_INTEGER f; //计时器频率int m, n, t2;getch();QueryPerformanceFrequency(&f);dqFreq = (double)f.QuadPart;QueryPerformanceCounter(&time_start);    //计时开始for (i = 0; i < 20; i++) {t2 = gcd(z[0][i], z[1][i]);printf("The higest common divisor is %d\n", t2);}QueryPerformanceCounter(&time_over);   //计时结束run_time = 1000000 * (time_over.QuadPart - time_start.QuadPart) / dqFreq;//乘以1000000把单位由秒化为微秒,精度为1000 000/(cpu主频)微秒printf("\nrun_time:%fus\n", run_time);return 0;
}

Stein算法非函数递归调用

#include "stdio.h"
#include <windows.h>
int Stein(int x,int y)/*return the greatest common divisor of x and y*/
{int factor=0;int temp;
if(x<y){temp=x;x=y;y=temp;}
if(0==y){return 0;}
while(x!=y){if(x&0x1){if(y&0x1){y=(x-y)>>1;x-=y;}else{y>>=1;}}
else{if(y&0x1){x>>=1;if(x<y){temp=x;x=y;y=temp;}}else{x>>=1;y>>=1;++factor;}   }}
return (x<<factor);
}
int main()
{int z[2][20] = {{1,1},{31,43,46,65,43,58,55,54,55,56,98,78,96,54,78,85,57,12,36,15}};int i = 0;double run_time;LARGE_INTEGER time_start; LARGE_INTEGER time_over;    double dqFreq;      LARGE_INTEGER f;    int m,n,t2;
getch();QueryPerformanceFrequency(&f);dqFreq=(double)f.QuadPart;QueryPerformanceCounter(&time_start);  for( i = 0; i < 20; i++){t2 = Stein(z[0][i],z[1][i]);printf("The higest common divisor is %d\n",t2);}QueryPerformanceCounter(&time_over);  run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;printf("\nrun_time:%fus\n",run_time);return 0;
}

代码运行效果如下:

编者注:以上对本小题的代码编写的多种方法,欢迎大家收藏借鉴并转发;

以上代码仅供参考,如有问题欢迎大家在留言区批评指正;

版权所有,翻印必究,如有雷同纯属巧合,转载请注明出处。

By CRH380AJ2808 2022.04.23
————————————————
版权声明:本文为CSDN博主「CRH380AJ2808」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JH13thpig/article/details/124361837

求最大公约数 最大公因数 语言实现输出一个整数的最大公约数(因数),四种算法实现相关推荐

  1. -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...

    题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...

  2. C语言之输出一个整数的每一位

    输出一个整数的每一位. 代码思路: 1.用户输入一个整数,获取整数的值 2.将值传给自定义函数 3.代码执行进入自定义函数中 4.不需要返回值,自定义函数直接打印,所以函数类型为void类型 5.第一 ...

  3. C语言存储编码输出,C语言怎么输出一个菱形

    C语言怎么输出一个菱形 C语言是计算机的高级语言,在IT行业被众多的人们是使用,由于IT行业的热门,使用以及学习C语言的人越来越多,掌握一些C语言基本的语言是非常重要的,只有基础知识扎实了,才能在C语 ...

  4. C语言——输出一个整数的每一位

    [问题描述]:输出一个整数的每一位.例如:给一个数2468,在屏幕上打印出来2 4 6 8 [解题思路]:将整数的每一位进行拆分,然后依次打印出来   例如:28 ,首先28%10得到余数8,然后在2 ...

  5. 四种算法求最大公约数

    四种算法求最大公约数(C++) 一. 实验目的 明确算法的概念和特点. 通过对问题的分析,设计合理的算法解决问题: 二. 实验内容 运行最大公约数的常用算法,并进行程序的调式与测试,要求程序设计风格良 ...

  6. 1027: 伊顿公学进入名校人数第2题(2级)输入两个用空格分隔的整数m和n,分别表示某年的毕业生人数和该年度进入某名校的百分比。输出输出一个整数count,表示该年度进入该名校的学生人数

    1027: 伊顿公学进入名校人数第2题(2级) 时间限制: 1 Sec 内存限制: 128 MB 提交: 199 解决: 78 [提交] [状态] [讨论版] [命题人:admin] 题目描述 伊顿公 ...

  7. java定义一个方法,向控制台输出一个整数的阶乘

    java定义一个方法,向控制台输出一个整数的阶乘 /*** 定义一个方法,向控制台输出一个整数的阶乘*/ public class Test19 {//输出阶乘的方法public static voi ...

  8. 输出一个整数的二进制数、八进制数、十六进制数。

    十进制转二进制:            十进制整数转二进制数:"除以2取余,逆序排列"(除二取余法) 十进制转八进制:            十进制整数转八进制数:"除以 ...

  9. 【C语言】实现求两个数的最大公约数【四种算法】

    题目 给定两个数,求这两个数的最大公约数 例如: 输入:20 40 输出:20 解题思路 最大公约数:即两个数据中公共约数的最大者 求解的方式比较多,暴力穷举.辗转相除法.更相减损法.Stein算法算 ...

  10. c语言:输出一个菱形图

    输出一个菱形图. 解:程序: #include<stdio.h> int main() { int i, j; char diamond[][5] = { {' ',' ','*'},{' ...

最新文章

  1. matlab节约里程法_芳烃产业链里程碑:唐山旭阳30万吨/年苯乙烯项目一次性开车成功...
  2. 电视剧《都挺好》给我的启示
  3. 算法------最接近的三数之和
  4. qt创建线程和退出线程
  5. 【Linux】一步一步学Linux——builtin命令(215)
  6. AE物体表面跟踪特效合成高级插件:Lockdown for Mac 支持ae2021
  7. 荷兰特温特大学研究人员、博士后招聘
  8. ubuntu workbench
  9. 解决 Illegal DefaultValue null for parameter type integer 异常
  10. mp4文件如何转换为webm格式
  11. 2021 年产品沉思录精选集 PDF 下载及卷首语合集:像农夫一样耕耘和等待
  12. 金山词霸2016下载的离线词典包位置
  13. airpodspro没有弹窗_Airpods Pro开盖没有弹窗怎么办
  14. 传感器研究NO1.陀螺仪
  15. 启动Activity的流程(Launcher中点击图标启动)
  16. 将切割后的小图片还原为大图片
  17. 最全数据集网站汇总,绝对是一个金矿请查收!
  18. matlab2016自带ga,[转载]MATLAB中自带遗传算法函数GA的用法
  19. Linux 命令 —— tree
  20. 大败局:知名企业的失败教训

热门文章

  1. COLMAP简明教程 重建 转化深度图 导出相机参数 导入相机参数 命令行
  2. 在抖音做电商:是赚是赔,往往取决于几分钱的算计
  3. 花大价钱买十五年前的交换机架构的“分布式KVM坐席/数字KVM坐席”???
  4. 14种鼻型图解_十种鼻型分类图详细解析
  5. [福大软工] Z班——Beta现场答辩反馈
  6. python 物理引擎 摩擦力_python下的Box2d物理引擎的配置
  7. win10下u盘检测的到,但是盘符不显示
  8. 安装cad提示command_win7系统安装CAD软件失败总是提示“错误1327”怎么解决
  9. 腰围尺寸2尺1、2、3、4、5、6、7、8寸分别等于是多少厘米/英寸(对照参考表)
  10. Python open和with open的区别