关于C语言最大公约数的相关数学问题,想请教一下这个代码是为什么就可以求出来最大公约数,原理是什么?求解释一下
最大公约数,一定是 能被 x 或 y 同时整除的 最大的数
百度辗转相除法
#include <stdio.h>
int main() {
// 初始化变量
int n = 0;
int i = 0;
int flag = 1;
// 输入数字
scanf("%d", &n);
//设置循环程序
for (i = 2; i < n; i++) {
if (n % i == 0) {
flag = 0;
}
}
if (flag == 1) {
printf("这是素数,是%d\n", n);
}
else {
printf("这不是素数\n");
}
return 0;
}
首先,这段代码使用的是穷举法来求解两个数的最大公约数,从小到大枚举每个自然数是否同时为两个数的约数,并找到最大的一个即为所求的最大公约数。但是这种方法非常慢,有时需要遍历所有的数才行,所以可以采用更为高效的辗转相除法。
辗转相除法是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
下面是采用辗转相除法计算最大公约数的C代码:
int gcd(int a, int b){
if(a < b){
int temp1 = a;
a = b;
b = temp1;
}
while(b != 0){
int temp2 = b;
b = a % b;
a = temp2;
}
return a;
}
上述代码中用到了函数,函数的定义如下:
int gcd(int a, int b)
其中,int表示返回值类型为整型,gcd表示函数名,(int a, int b)表示两个输入参数类型为整型。函数返回的是两个数的最大公约数。
使用该函数的代码如下:
#include <stdio.h>
//函数声明
int gcd(int a, int b);
int main()
{
printf("The greatest common divisor is %d\n", gcd(100, 60));
return 0;
}
其中,第一行为函数声明,函数的定义在之后,调用该函数在printf语句中,输出结果为最大公约数。