任务目标
输入两个数a和b,输出它们的最大公约数
任务枚举
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);
- 设t为2
- 如果u和v都能被t整除,则记下这个t
- t加1后重复第二步,直到t等于u或者v
- 那么,曾经记下的最大的可以同时整除u和v的t就是gcd
任务实施(辗转相除法)
辗转相除法介绍
- 如果b等于0,计算结束,a就是最大公约数
- 否则,计算a除以b的余数,让a等于b,而b等于那个余数
- 回到第一步
a b t
12 18 12
18 12 6
12 6 0
6 0
代码执行
#include <stdio.h>
int main()
{
int a,b;
int t;
scanf("%d %d",&a,&b);
a=12;b=18;
while (b!=0){
t=a%b;
a=b;
b=t;
printf("a=%d,b=%d,t=%d\n",a,b,t);
}
printf("gcd=%d\n",a);
return 0;
}