汤姆叔叔的小屋 发表于 2020-4-21 19:45:55

C语言 求两个数的公约数

求两个数的公约数,
# include<stdio.h>
int main()
{
        int a, b, c, d;
        scanf("%d %d",&a, &b);
        int n, m, max=1;
        for(n=0; n<a; n++)
        {
                for(m=0; m<b; m++)
                {
                        if(a%n==b%m)//箭号
                        {
                                d = a % n;
                                if(max<d)
                                {
                                        max = d;
                                }
                        }
                       
                }
        }
        printf("%d\n", max);
        return 0;
}
编译正常,但运行无法得出正确结果,尝试调试到箭号出跳出cpu窗口,显示=> 0x0000000000401534 <+68>:        idivl-0x4(%rbp)求解

15533617457 发表于 2020-4-21 20:00:11

# include<stdio.h>
int main()
{
      int a, b, c, d;
      scanf("%d %d",&a, &b);
      int n, m, max=1;
      for(n=1; n<a; n++)
      {
                for(m=1; m<b; m++)
                {
                        if(a%n==0&&b%m==0&&m==n)//箭号
                        {
                            max = m;
                        }
                }
      }
      printf("%d\n", max);
      return 0;
}
是求最大公约数吗还是所有公约数你试试这个代码

BngThea 发表于 2020-4-21 20:05:12

你这个if判断是个什么逻辑?两个余数相等?是不是该都为0

liuzhengyuan 发表于 2020-4-21 20:06:26

本帖最后由 liuzhengyuan 于 2020-4-21 20:08 编辑

感觉你这个思路不对
可以百度了解一下 “辗转相除法”,这是一个很不错的求最大公约数的方法

倒戈卸甲 发表于 2020-4-21 20:08:44

二楼的回答应该就是你想要的了
页: [1]
查看完整版本: C语言 求两个数的公约数