这个又经典又老的题目啊~~
可以采用欧几里得方法:只要两数不相等,就反复用大数减小数,直到相等时的那个数就是最大公约数了。不过怎么这个用时这么久?
用时:313ms
#include
int a,b;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
while(scanf("%d%d",&a,&b)==2)
{
while(a!=b)
{
if (a>b)
a=a-b;
else
b=b-a;
}
printf("%d/n",a);
}
return 0;
}
下面这个用时:5ms
是连续整数检测法
#include
int a,b,i;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
while(scanf("%d%d",&a,&b)==2)
{
if (a>b)i=b;
else i=a;
for (;i>0;i--)
{
if(a%i==0&& b%i==0)
break;
}
printf("%d/n",i);
}
return 0;
}
还有一种辗转相除的欧几里得算法(奇怪:到底哪个才是真的欧几里得算法?)
用时:4ms(哈哈,竟然快了一秒)
#include
int m,n,r;
int gcd(int m,int n)
{
int r;
while(n>0)
{
r=m%n;
m=n;
n=r;
}
return m;
}
int main()
{
while (scanf("%d%d",&m,&n)==2)
{
printf("%d/n",gcd(m,n));
}
return 0;
}