c++求几个数的最大公约数_【算法趣谈】最大公约数

    gcd(Greatest common Divisor)最大公约数,也就是两个整数所有共有因数中最大的那个。比如说12和16的最大公约数就是4,因为12的约数是:1、2、3、4、6、12,而16的约数是1、2、4、8、16,它们共有的约数是:1、2、4,那么很明显,最大的公约数就是4了。

    那么如何求两个数的最大公约数呢?最容易想到的方法就是——试!

    如果我们要求a、b的最大公约数,就让一个数,k,从1枚举到a、b中较小的数。如果a、b都能被k整除,就把k记录下来,如果遇到更大的k满足条件,就替换原来的k。最后,输出的答案一定是它们的最大公约数。

    代码如下:

(python)

a=int(input())b=int(input())if a>b: #如果a比b大,则交换a、b,保证a存的是较小的那个    t=b    b=a    a=tans=0for k in range(1,a+1):#枚举1到a    if a%k==0 and b%k==0:#如果k是a、b的公约数        if k>ans:#如果k比原来答案大            ans=k#更新答案print(ans)

    (c++)

#include #include using namespace std;int main(){
      int a,b;  cin>>a>>b;  if(a>b) swap(a,b);  int ans=0;  for(int k=1;k<=a;k++)    if(a%k==0 && b%k==0)      ans=max(ans,k);  cout<}

    运行成功:

b0ff15d6b00eda2df6dc8d18a7f5def8.png

    可是,如果运用这个方法,在a、b很大的时候,程序会运行很慢。因为它需要从1开始一直往上枚举到a。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值