两个不全为0的非负整数m,n的最大公约数记为gcd(m,n),代表能够整除(即余数为0)m和n的最大正整数。
计算gcd(m,n)的欧几里得算法:
第一步:
如果n为0,则返回m作为结果,同时过程结束;否则进入第二步。
第二步:
m除以n,将余数赋值给l。
第三步:
将n的值赋值给m,将l的值赋值给n,返回第一步。
示例:
例如求gcd(27,30)
gcd(27,30)= gcd(30,27)= gcd(27,3)= gcd(3,0)=3
27与30的最大公约数为3
C语言欧几里得算法求最大公约数:
C语言代码:
/*
求两个不全为0的非负整数的最大公约数
欧几里得算法
*/
#include<stdio.h>
#include<stdbool.h>
// 欧几里得算法函数
int OJLD(int x, int y)
{
int z;
while (y != 0)
{
z = x % y;
x = y;
y = z;
}
return x;
}
int main()
{
int m, n, result;
bool flag;
do
{
flag = false;
printf("请输入两个不全为0的非负整数,中间以空格分隔:\n");
scanf_s("%d %d", &m, &n);
//输入检验,确保m,n为两个不全为0的非负整数
if ((m < 0 || n < 0)||(m==0 && n==0))
{
flag = true;
printf("您的输入有误,请重新输入\n");
}
} while (flag);
result = OJLD(m, n); //调用欧几里得函数计算最大公约数
printf("%d与%d的最大公约数为%d", m,n,result); //输出结果
return 0;
}