两个不全为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;
}