方法1 枚举法
思路 1设一个变量 设t为2
2如果这两个数u v 都能被t整除 则记下这个t的值
3 t加1,重复第二步,知道t=u或者v
4那木记下的最大的t便是所求值
#include <stdio.h>
int main()
{
int a,b;
int min;
scanf("%d %d", &a, &b);
if(a<b){
min = a;
}else{
min = b;
}
int ret =0;
int i;
for(i=1; i<min; i++){
if(a%i==0){
if(b%i==0){
ret = i;
}
}
}
printf("%d和%d最大公约数是%d.\n",a,b,ret);
return 0;
}
思路很简单 要求最小公约数就直接在循环末尾加break
方法2 辗转相除法
思路 1 若b为0,计算结束 a就是最大公约数
2 否则,计算a除于b的余数,让a=b,b=余数
3 回到第一步
演算
a b t
12 18 12
18 12 6
12 6 0
6 0
就是两个数相除,
140除119=1.。。。。21
119除21=5.。。。。。14
21除14=1.。。。。。7
14除7=2
最大公约数就是最后一次相除的除数,上一步取余的余数
#include <stdio.h>
int main()
{
int a,b;
int t;
scanf("%d %d", &a, &b);
while(b!=0){
t = a%b;
a=b;
b=t;
}
printf("gcd=%d\n",a);
return 0;
}
就一直取余就好了 别忘了之前的内容 !=是不等于的意思