最大公约数(greatest common divisor,),指能够整除多个非零整数的最大正整数。
求最大公约数
1.素数分解法
素数,又叫质数(Prime number),指大于1的正整数中只有1和该数本身2个正约数的数。大于1的自然数若不是素数就是合数。因此一个自然数可以分解为多个素数的积。
比如求
2.辗转相除法
辗转相除法又称欧几里得算法(Euclidean algorithm)描述为:
求证辗转相除法
方法一
设的公约数。
因为为的约数。
因此为和的公约数。
因为原本就是的公约数,所以和有一样的约数。
因此
方法二
设并且,
如果则
如果则
如果则
辗转相除法案例
c语言实现
/**
* Copyright[2024] <Mopoke>
*/
#include <stdio.h>
#include <stdlib.h>
int gcd(int num_1, int num_2) {
if (num_1 == 0) { return num_2; }
if (num_2 == 0) { return num_1; }
while ((num_1 %= num_2) && (num_2 %= num_1)) {}
return num_1 + num_2;
}
int main(int argc, char* argv[]) {
int num_1 = 0;
int num_2 = 0;
printf("Please input 2 positive integers:");
scanf("%d %d", &num_1, &num_2);
if (num_1 < 0 || num_2 < 0) {
fprintf(stderr, "Error - Please input positive integers.\n");
exit(EXIT_FAILURE);
}
printf("gcd(%d, %d) = %d\n", num_1, num_2, gcd(num_1, num_2));
return EXIT_SUCCESS;
}