【CodeVS】1212 最大公约数

来源:互联网 发布:淘宝集市c店免费活动 编辑:程序博客网 时间:2024/05/18 06:26

辗转相除法

#include <cstdio>int a,b;inline int gcd(int i,int j){    for (int r;j;) r=i%j,i=j,j=r;    return i;}int main(void){    scanf("%d%d",&a,&b);    printf("%d\n",gcd(a,b));    return 0;}

二进制法:

#include <cstdio>int a,b;inline void swap(int &i,int &j){    i^=j^=i^=j;}int gcd(int i,int j){    int cnt=0;    if (i<j) swap(i,j);    for (;j;)    {        if (!(i&1)&&!(j&1))            i>>=1,j>>=1,cnt++;        else        if (!(i&1)&&(j&1))            i>>=1;        else        if ((i&1)&&!(j&1))            j>>=1;        else i-=j;        if (i<j) swap(i,j);    }    return i<<cnt;}int main(void){    scanf("%d%d",&a,&b);    printf("%d\n",gcd(a,b));    return 0;}

实测二进制法快一些.

0 0
原创粉丝点击