zjut 1177 最大公约数

       这个又经典又老的题目啊~~

       可以采用欧几里得方法:只要两数不相等,就反复用大数减小数,直到相等时的那个数就是最大公约数了。不过怎么这个用时这么久?

用时: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值