djdgf4 发表于 2022-5-20 11:29

求最大公约数和最小公倍数的函数

本帖最后由 djdgf4 于 2022-5-20 14:03 编辑

输出没有任何结果,请问是哪里错了?
我是参考了这个帖子,并不是单一想用辗转相除或更相减损,想问问在这个帖子的思路上,这串代码的错误?https://zhuanlan.zhihu.com/p/31824895
/*
* 该函数用来计算两个数的最大公约数
*/
int greatest_common_divisor(int n,int m)
{
    int gcd=-1;
    // 请在下面添加代码
    // ********** Begin **********
    if( n == m)
      return n;
    if( n < m)
      return greatest_common_divisor( m, n);
    else {
      if( !n&1 && !m&1 )
            return greatest_common_divisor( n>>1, m>>1)*2;
      else if( !n&1 && m&1 )
            return greatest_common_divisor( n>>1, m);
      else if( n&1 && !m&1 )
            return greatest_common_divisor( n, m>>1);
      else
            return greatest_common_divisor( n, n-m);
    }
    // **********End**********
    return gcd;
}
/*
* 该函数用来计算两个数的最小公倍数
*/
int least_common_multiple(int n,int m)
{
    int lcm=0;
    // 请在下面添加代码
    // ********** Begin **********
    int greatest_common_divisor(int n,int m);
    lcm = ( n * m )/(greatest_common_divisor( n, m));
    // **********End**********
    return lcm;
}

甜萝 发表于 2022-5-20 11:45

https://www.runoob.com/python3/python3-hcf.html
https://www.runoob.com/python3/python3-lcm.html
可以参考上面链接

wihn 发表于 2022-5-20 12:20

!优先级比&高,一些条件应该写作!(m&1)吧。
另外,gcd这个变量没用到,这应该是道题目吧,那尽量用gcd

seawaycao 发表于 2022-5-20 12:33

递归的效率太低了。

y761110576 发表于 2022-5-20 13:12

return greatest_common_divisor( n, n-m);
应该是return greatest_common_divisor( m, n-m);

列明 发表于 2022-5-20 13:42

不懂就问,&是什么意思,两个小于号又是什么意思,求余不应该是%么?

djdgf4 发表于 2022-5-20 13:55

列明 发表于 2022-5-20 13:42
不懂就问,&是什么意思,两个小于号又是什么意思,求余不应该是%么?

&是按位与运算,判断奇偶;<<是移位,相当于除以2

列明 发表于 2022-5-20 15:15

djdgf4 发表于 2022-5-20 13:55
&是按位与运算,判断奇偶;

原来这两个都是位运算啊,明白了,&位与,<<移位,我以前问过,别人也给我说过,我记住过,忘记了

老伙计 发表于 2022-5-20 15:28

#include <stdio.h>

int gcd(int a , int b)
{
      if(b) return gcd(b , a % b)         ;
      else return a                     ;
}

int main(void)
{
      int a , b                           ;
      scanf("%d%d" , & a , & b)         ;
      printf("%d\n" , a * b / gcd(a , b)) ;
}
页: [1]
查看完整版本: 求最大公约数和最小公倍数的函数