1.穷举法:从两个数中更小的那一个数开始循环(递减)至1,寻找最大公约数。 很遗憾,此法超时。具体代码见下:
#include<stdio.h>
int main() {
int A, B, min, i;
scanf("%d %d", &A, &B);
min = (A <= B) ? A : B;
for (i = min; i >= 2; i--) {
if (A % i == 0 && B % i == 0)
break;
}
printf("%d\n", i);
return 0;
}//此法超时
2.辗转相除法:用较大数A除以较小数B,再将余数值赋给B,将B值赋给A......如此反复,直到最后余数是0为止。最后的除数(即最终A的值)就是所求的最大公约数。 代码见下:
int main() {
int A, B, temp;
scanf("%d %d", &A, &B);
if (A < B) { //若A<B则交换A,B的值,使A表示两数中更大的那个数
temp = A;
A = B;
B = temp;
}
while (B != 0) { //辗转相除法
temp = A % B;
A = B;
B = temp;
}
printf("%d\n", A);
return 0;
}