1 条题解

  • 1
    @ 2026-2-2 10:14:49

    《最大公约数》题解

    此题如果利用for循环必会错5个点(不要问我怎么知道的),所以我们必须使用欧几里得算法(又名辗转相除法)。 欧几里得算法,就是两个数中略大的那一个数当做被除数,另外一个数作为除数,两数相除,除完之后在拿除数除以余数……一直像上述操作直到余数为0时,除数就是两数的最大公约数。 (注意!!!此题因为数据是10^{16}必须开long long储存值) 我又上网查了一下相关资料,公式就是: gcd(a,b)=gcd(b,a % b) 例如,计算252和105的最大公约数: 252 ÷ 105 = 2,余数为42 105 ÷ 42 = 2,余数为21 42 ÷ 21 = 2,余数为0 因此,252和105的最大公约数是21。 题解放在下面了,一个大拇哥拿走。三克油歪瑞妈迟

    #include<bits/stdc++.h>
    using namespace std;
    long long a,b,x=0,y=0,z=0;
    int main(){
       cin>>a>>b;
       x=a;
       y=b;
       while(x%y!=0){
          z=x;
          x=y;
          y=z%y;
       }
       cout<<y;
       return 0;
    }
    
    • 1

    信息

    ID
    366
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    26
    已通过
    9
    上传者