求两个整数的最大公约数(两种方法)
思路一:最大公约数不会超过两个整数中那个最小的
- 判断出两个整数中的最小整数
- 让那个最小的整数依次进行减小,直到找出最大公约数被输入的那两个整数同时整除
- 输出这个最大公约数整数
注 : 在2019当中 scanf 函数提示有风险警告,添加下面预处理命令后方可使用 scanf 函数
#define _CRT_SECURE_NO_WARNINGS 1 //scanf 函数的未识别错误处理,否则使用 scanf_s 函数名
#include <stdio.h>
int main()
{
int a = 0;
int b = 0; //输入的两个整数
int c = 0; //最大公约数
scanf("%d %d",&a,&b);
if (a > b)
{
c = b;
}
else
{
c = a;
}
while (1)
{
if (a % c == 0 && b % c == 0)
{
printf("最大公约数是:%d", c);
break;
}
c--; //从输入的两个整数中 较小的那个整数开始 递减,直至找到最大公约数为止;最坏情况 即减至 为1,可被整除 跳出循环
}
return 0;
}
思路二:辗转相除法
-
利用输入的两个整数相模,判断余数;
-
若余数为0,则两个相模整数中较小那个为最大公约数;否则,将上一步中 除数 移至 被除数,余数 移至 除数,继续取模,直到余数为零,取出最大公约数!
-
是一大一小或一小一大都无所谓
#define _CRT_SECURE_NO_WARNINGS 1 //scanf 函数的未识别错误处理,否则使用 scanf_s 函数名
#include <stdio.h>
int main()
{
int a = 0;
int b = 0; //输入整数
int c = 0; //最大公约数
scanf("%d %d", &a, &b);
while (c = a % b)
{
a = b;
b = c;
}
printf("最大公约数为:%d\n",b);
//注:最小公倍数 = a * b / 最大公约数;
return 0;
}
注:文章内容限于作者才疏学浅,有问题,请指正!