百姓心情网-为你提供各类经典名言与文案句子

求最大公约数c语言

在C语言中,求两个整数的最大公约数(GCD)有多种方法,以下是几种常用的方法:

辗转相除法(欧几里得算法)

这是最常用的方法,通过递归或循环实现。

算法原理:用较大的数除以较小的数,然后用余数代替较大的数,再用较小的数除以余数,直到余数为0为止,此时较小的数即为最大公约数。

```c

int gcd(int a, int b) {

if (b == 0) {

return a;

}

return gcd(b, a % b);

}

```

更相减损法

通过不断用较大数减去较小数,直到两数相等,此时相等的数即为最大公约数。

```c

int gcd(int a, int b) {

if (a == b) {

return a;

}

if (a > b) {

return gcd(a - b, b);

}

return gcd(a, b - a);

}

```

移位法

当两个数都是偶数时,2是它们的公约数,将两个数都右移1位,再继续求最大公约数,直到其中一个为0,此时另一个数即为最大公约数的2的幂倍。

```c

int gcd(int a, int b) {

if (a == 0) {

return b;

}

if (b == 0) {

return a;

}

if ((a & 1) == 0 && (b & 1) == 0) {

return 2 * gcd(a >> 1, b >> 1);

}

if ((a & 1) == 0) {

return gcd(a >> 1, b);

}

if ((b & 1) == 0) {

return gcd(a, b >> 1);

}

if (a > b) {

return gcd(a - b, b);

}

return gcd(a, b - a);

}

```

质因数分解法

将两个数分解成质因数,然后找出共同的质因数,最后将这些共同质因数相乘即可得到最大公约数。

短除法

类似于更相减损法,但通过不断找出两个数的公约数并除以这些公约数,直到找不到公约数为止,最后剩下的数即为最大公约数。

示例代码

```c

include

// 函数声明

int gcd(int a, int b);

int main() {

int a, b;

printf("请输入两个整数: ");

scanf("%d %d", &a, &b);

int result = gcd(a, b);

printf("最大公约数是: %d\n", result);

return 0;

}

// 函数定义

int gcd(int a, int b) {

if (b == 0) {

return a;

}

return gcd(b, a % b);

}

```

这个程序会提示用户输入两个整数,然后计算并输出它们的最大公约数。你可以选择上述任何一种方法来实现求最大公约数的功能。

上一篇上一篇:百世快递投诉最有效果的办法

下一篇下一篇:没有了