当前位置:网站首页>C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
2022-08-08 17:08:00 【小牛要翻身】
一、什么是公约数?
公约数,就是能同时整除几个整数的整数。最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
例如: 2能整除4,2能整除8;4能整除4,4能整除8,所以说(2和4)是(4和6)的公约数,而4是(2和4)的最大公约数。
二、求解两个数的最大公约数
1、枚举法
思路: 假设两个数字a和b,比较出更小的数字赋值给变量min,遍历1到min的整数,找到所有能共同被a和b整除的数字,其中数值最大的便是所求最大公约数。
代码展示
//枚举法
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
int min = (a < b ? a : b);
while (a % min != 0 || b % min != 0)//如果不能同时整除
{
min--;
}
printf("%d",min);
return 0;
}
2、相减法
思路: 假设两个数字a和b,如果a>b,则a=a-b;如果b>a,则b=b-a。一直循环计算直到a=b,则此时a、b的值即为所求最大公约数。
代码展示:
//相减法
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
while (a != b)//直到两个数相等
{
if (a > b)
{
a = a- b;
}
else
{
b = b - a;
}
}
printf("%d",a);
return 0;
}
3、辗转相除法
思路: 假设两个数字a和b,求两个数字相除的余数c=a%b,如果余数为0,则b为最大公约数。如果b不为零,a=b,b=c,继续循环计算。
代码展示:
//辗转相除法
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
while (a%b != 0)//如果不能整除
{
int c = a % b;
a = b;
b = c;
}
printf("%d",b);
return 0;
}
总结
- 三种方法穷举法效率最低
- 推荐使用辗转相除法和相减法
边栏推荐
猜你喜欢
随机推荐
leetcode:313. 超级丑数
LeetCode_Binary Tree_Medium_515. Find the maximum value in each tree row
bzoj1269 [AHOI2006]文本编辑器editor
LeetCode_回溯_中等_491.递增子序列
【20210923】选择感兴趣的研究方向?
正则在js中的使用
维尔薇vs千劫
3dsmax2021软件安装教程
在指南针炒股软件中的指标靠谱吗?安全吗?
L2-012 关于堆的判断 (25 分)(堆)
Web3构架是怎么样的?
iNFTnews | 元宇宙为企业发展带来新思路
C1. Pokémon Army (easy version)
第二十章 源代码文件 REST API 参考(二)
毕设-基于SSM学生考试系统
L2-011 玩转二叉树 (25 分) (二叉树)
DASCTF部分复现
L2-021 点赞狂魔 (25 分)
敏捷开发项目管理的一些心得
【MySQL哪些字段适合建索引,哪些查询条件会导致索引失效】









