先看题👇
我这里介绍的方法:辗转相除法:
最大公约数:
最大公约数是指同时能整除俩个或更多整数的最大正整数。
欧几里得算法就是求最大公约数的算法
求最大公约数涉及到一个数学原理的转换:
俩个数的最大公约数等于其中一个数和另一个数的余数的最大公约数
算法步骤:
1.初始化:
设俩个非负整数a,b ,假设(a>b)
2.取模运算:
将a除以b,然后取余数r
3.更新值
将b的值赋值给a
将余数赋值给b
公式: a=b b=r
4.循环
重复步骤2,3
直到b==0
5.结果:
当b==0时,此时就时最大公约数
例子👇mod(就是取余数)
写成c语言程序
#include<stdio.h>
int main()
{
int a =10;
int b =20;
while(b!=0)
{
int temp =b;
b=a %b;
a=temp;
}
printf("%d ",a);
return 0;
}
while里头就是欧几里得算法的内容
这道题目代码如下:
#define _CRT_SECURE_NO_WARNINGS
//给定俩个数,求这俩个数的最大公约数
#include <stdio.h>
// 函数:计算最大公约数
int gcd(int a, int b)
{
// 使用辗转相除法
while (b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main()
{
int num1, num2;
// 输入两个数
printf("请输入两个整数: ");
scanf("%d %d", &num1, &num2);
// 计算最大公约数
int result = gcd(num1, num2);
// 输出结果
printf("最大公约数为: %d\n", result);
return 0;
}
代码运行