最大公约数
是指两个或多个整数共有约数中最大的一个。
解决方法
在这里我们有两种方法去求解:
①辗转相除法:两数反复取余(下次执行时用除数和余数取余),直到余数为0停止,此时的除数就为最大公约数
②更相减损术:用较大的数反复减去较小的数(下次执行时用减数和差中较大的数减去较小的数),直到差为0,此时的减数就为最大公约数
代码示例
如果哪里看不懂,可以再参考解决方法,自己用笔比划一下
①辗转相除法:
#include <stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int main()
{ //定义三个变量,a为被除数,b为除数,t为余数
int a = 0;
int b = 0;
int t = 1;
printf("请输入两个数:");
scanf("%d %d", &a, &b);
while (t != 0){
t = a % b;
//交换位置
a = b;
b = t;
}
printf("两个数的最大公约数为:%d\n", a);
system("pause");
return 0;
}
②更相减损术
//更相减损术
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
int main()
{ //定义四个变量,a为被减数,b为减数,t为差,temp为中间变量
int a = 0;
int b = 0;
int t = 1;
int temp = 0;
printf("请输入两个数(由大到小输入):");
scanf("%d %d", &a, &b);
while (t != 0){
//始终保持被减数为较大的数
if (a < b){
temp = a;
a = b;
b = temp;
}
t = a - b;
//交换位置
a = b;
b = t;
}
printf("两个数的最大公约数为:%d\n", a);
system("pause");
return 0;
}
运行结果
①辗转相除法
②更相减损术
补充:
#define _CRT_SECURE_NO_WARNINGS 和#pragma warning(disable:4996)是为了解决VS2015中出现的4996问题
system("pause");VS2015运行结果可以暂停一下显示出来
(其他编译软件可不加这两条代码)