最开始的解法
//裁判测试用例
#include <stdio.h>
int fun(int a,int b);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", fun(a,b));
return 0;
}
/* 请在这里填写答案 */
最开始的想法
//实现代码
int fun(int a,int b){
int i,temp=0;
for(i=a;i>1;i--){
if(a%i==0){
if(b%i==0){
temp=i;
break;
}
}
}
return temp;
}
辗转相除法:
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。
例子:求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
代码实现:
int fun(int a,int b){
int y,m,n;//m为被除数,n为除数,y为余数,temp为最大公约数
if(a>b){
m=a;
n=b;
}else{
m=b;
n=a;
}//判断哪个数大
y=m%n;//要先除一遍判断y!!!
while(y>0){
m=n;
n=y;
y=m%n;
}
return n;
}