求两个正整数的最大公约数
来源:互联网 发布:千兆网络交换机价格 编辑:程序博客网 时间:2024/05/16 00:28
基本要求:从键盘输入两个整数,输出两个整数的最大公约数。用C或C++语言实现程序解决问题。
1. 程序风格良好(使用自定义注释模板)
2. 使用三种算法解决问题
3. 提供友好的输入输出,并进行输入数据的正确性验证
方法一:穷举法
穷举法,顾名思义,就是一个一个试,即遍历两个整数中较小的数到零的所有数,如果能够同时被两个整数整除,则这个数就为这两个数的最大公约数。
具体实现代码如下:
#include<stdio.h>int main(){int m,n,k;printf("请输入两个正整数:");scanf("%d%d",&m,&n);int GDC(int a,int b);//声明函数 k=GDC(m,n);printf("%d和%d的最大公约数为:%d",m,n,k);return 0;}int GDC(int a,int b)//定义一个函数用来求最大公约数 {int i,q;q=a>b?b:a;//将两个正整数中较小的数赋给q for(i=q;i>0&&(b%i||a%i);i--);//遍历从q到0的所有数,如果能同时被两个正整数整除,则为两个数的最大公约数 return i;}方法二:相减法
相减法,即通过连续相减求得两个数的最大公约数。
如果a>b,则a=a-b;
如果a<b,则b=b-a;
如果a=b,则a和b均为最大公约数。
例如:a=27,b=15;
则27-15=12,15-12=3,12-3=9,9-3=6,6-3=3。则3位27和15的最大公约数。
具体实现代码如下:
#include<stdio.h>int main(){int m,n,k;printf("请输入两个正整数:");scanf("%d%d",&m,&n);int GDC(int a,int b);//声明函数 k=GDC(m,n);printf("%d和%d的最大公约数为:%d",m,n,k);return 0;}int GDC(int a,int b)//定义一个函数用来求最大公约数 {while(a-b)//利用相减法求最大公约数 {if(a>b)a=a-b;elseb=b-a;}return a;}方法三:辗转相除法
辗转相除法,即利用连续相除来求最大公约数。
例:a=36,b=27
36%27=9,27%9=0。则9即为36和27的最大公约数。
具体实现代码如下:
#include<stdio.h>int main(){int m,n,k;printf("请输入两个正整数:");scanf("%d%d",&m,&n);int GDC(int a,int b);//声明函数 k=GDC(m,n);printf("%d和%d的最大公约数为:%d",m,n,k);return 0;}int GDC(int a,int b)//定义一个函数求最大公约数 {int c;while(b)//利用辗转相除法求最大公约数 {c=a%b;a=b;b=c;}return a;}总结:
通过完成这次作业我学到了许多东西,自己原本只会用穷举法求两个数的最大公约数,通过这次作业,我也掌握了相减法和辗转相除法这两种方法。在以后学习过程中,我需要开拓自己的思维,,尝试着去用多种不同的方法来解决问题。
1 0
- 求两个正整数的最大公约数?
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数
- 求两个正整数的最大公约数(GCD)
- 求两个正整数的最大公约数和最小公倍数
- 求两个正整数的最大公约数和最小公倍数
- 求两个正整数的 最大公约数和最小公倍数
- 求两个正整数的最大公约数和最小公倍数!
- 求两个正整数的最大公约数和最小公倍数
- 求两个正整数的最大公约数与最小公倍数
- 求两个正整数之间的最大公约数
- 【0321】供应链、产品、获客
- Caffe学习日记9
- 【LeetCode】529. Minesweeper
- React学习笔记(二)
- 442. Find All Duplicates in an Array
- 求两个正整数的最大公约数
- C++Primer笔记--vector 对象 string 对象的下标操作警告
- jQuery ui中日期控件datepicker的使用整理
- 基本IO操作(一)
- 大搬家
- Java语言基础(六)-数组
- 第二十九、Java之值传递
- error c3872: “0x3000”: 此字符不允许在标识符中使用
- MySQL性能优化