当前位置:网站首页>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;
}
总结
- 三种方法穷举法效率最低
- 推荐使用辗转相除法和相减法
边栏推荐
- C. Palindromifier
- 【MySQL哪些字段适合建索引,哪些查询条件会导致索引失效】
- iNFTnews | Metaverse brings new ideas for enterprise development
- D. Districts Connection
- L2-028 秀恩爱分得快 (25 分)
- APICloud AVM 封装日期和时间选择组件
- Tensorflow教程(六)——变量基础操作
- Acwing Week 63 [Unfinished]
- 钱放在股票账户安全吧?
- 【20210923】Choose the research direction you are interested in?
猜你喜欢
随机推荐
iNFTnews | 元宇宙为企业发展带来新思路
京东二面:高并发设计,都有哪些技术方案?
QCon 回顾 | Data Fabric:逻辑统一、物理分散
4、S32K14X学习笔记:S32 Design Studio 新建和导入工程
Camera calibration toobox for Matlab(一)—— 工具包的基本使用
开源项目管理解决方案Leantime
Tensorflow教程(三)——获取数据 feed 和 fetchn
Photoshop2021安装教程
智能指针学习笔记
PNAS最新研究:81%解题率,神经网络 Codex 推开高等数学世界大门
L2-011 玩转二叉树 (25 分) (二叉树)
Are Huishang Futures official and reliable?Is it safe to open an account in Huishang Futures?
[Paper Reading] RAL 2022: Receding Moving Object Segmentation in 3D LiDAR Data Using Sparse 4D Convolutions
L2-023 图着色问题 (25 分)
L2-020 功夫传人 (25 分)
Tensorflow教程(五)——MNIST项目提高
NSSCTF部分复现
MySQL 数据库
pytorch常用语句
L2-028 秀恩爱分得快 (25 分)