求最大公约数
方法一:
枚举法:
1.设t为2;
2.如果u和v都能被t整除,则记下这个t;
3.t加1后重复第2步,直到t等于u或v;
4.那么,曾记录的最大的可以同时整除u或v的t就是gcd;
如下图:
代码如下:
/*
枚举法
1.设t为2;
2.如果u和v都能被t整除,则记下这个t;
3.t加1后重复第2步,直到t等于u或v;
4.那么,曾记录的最大的可以同时整除u或v的t就是gcd;
*/
#include<stdio.h>
int main ()
{
int a,b;
int min;
scanf("%d %d",&a, &b);
//判断a与b的大小,让min等于当中的最小值
if ( a<b ) {
min = a;
} else {
min = b;
}
//ret来保留最大公约数值
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;
}
方法二
转辗相除法:
如果b等于0,计算结束,a就是最大公约数;
否则,计算a除以b的余数。让a等于b,而b等于那个余数;
回到第一步。
例:
a b t
12 18 12
18 12 6
12 6 0
6 0
如下图
代码如下:
/*
如果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);
while (b != 0 ) {//判断b是否等于0
t = a%b;
a = b;
b = t;
}
printf("最大的公约数%d\n", a);
return 0;
}