1、欧几里得算法(也叫作辗转相除法)。
2、最大公因数 的定义,找到两个数中更小的那个数,然后依次减一,直到能够除尽这两个数。
3、找出不大于这两个数的所有质数(用素数筛选法),再找出二者相同的质因数相乘,即为最大公因数。
当然,也可以自己去百度,有更详细的介绍,这里不再赘述。
1、欧几里得算法 and 2、最大公因数的定义
这里我们使用递归的算法,当然也可以使用递推的方法,那样更快。
#include<stdio.h>
int gcd(int a, int b)
{
int r = a % b;
if (r == 0)
return b;
a = b;
b = r;
gcd(a, b);
}
int min(int a, int b)
{
return a < b ? a : b;
}
int init(int a, int b)
{
int t = min(a, b);
for (; t > 0; t--)
{
if (a % t == 0)
{
if (b % t == 0)
return t;
else
continue;
}
else
continue;
}
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int ret = gcd(a,b);
printf("ret=%d\n", ret);
int ret1 = init(a, b);
printf("ret1=%d\n", ret1);
return 0;
}
重点是自己把递归定义写出来就行。