题目:求最大公约数
分析题目:1 从1开始除
2 辗转相除法
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 ÷ 615 = 3 (余 152)
615 ÷ 152 = 4(余7)
152 ÷ 7 = 21(余5)
7 ÷ 5 = 1 (余2)
5 ÷ 2 = 2 (余1)
2 ÷ 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
代码:
1
#include<stdio.h>
int main(void)
{
int a, b,i;
printf("大数在前:");
scanf_s("%d %d", &a, &b);
for (i = 1;i<=b; i++) {
if (a % i == 0 && b % i == 0) {
printf("%d\n", i);
}
}
return 0;
}
2
#include<stdio.h>
int main(void)
{
int a, b, i=1;
scanf_s("%d %d", &a, &b);
while (i!=0) {
i = a % b;
a = b;
b = i;
}
printf("%d", a);
return 0;
}