【问题标题】:Given thr GCD(=1) and one number, find the second number给定 HCF(=1) 和一个数字,找到第二个数字
【发布时间】:2020-11-26 10:46:29
【问题描述】:

我正在想办法解决这个问题。用户必须输入一个数字 N,程序必须打印它们和 N 之间 GCD=1 的数字。 如果输入是 5,那么程序应该打印“1 2 3 4”。 对于输入 6,打印应为“1 5”。 然而我的代码没有打印任何东西。谁能帮帮我?

#include <stdio.h>
#include <stdlib.h>

int gcd(int a, int b)
{
    if (a==b)
        return a;
    else
        if(a<b)
        return gcd(a, b-a);
    else
        return gcd(a-b, b);

}


int main()
{
        int i=0;
        long int n;
        scanf("%ld", &n);

        if (n<1 || n>999999999)
         printf("Wrong Input");

        else
        {
              for(i=0; i<=n ; i++)
              {
                  gcd(n, i);
                  if (gcd(n,i)==1)
                      printf("%d ", i);
              }

        }

    return 0;
}

【问题讨论】:

  • 也许这是一件很挑剔的事情,但是当您要求其他人阅读您的代码时,您至少可以尝试使其尽可能可读。修正格式。
  • for(i=0; 应该是 for(i=1;

标签: c


【解决方案1】:

我改变了循环

for (int i=0;i

int main()
{
    int found=0;
    long n;
    scanf("%ld", &n);
    if (n<1 || n>999999999)
            printf("Wrong Input");
    else
    {
        for(int i=1; i<=n ; i++)
        {
            gcd(i, n);
            if (gcd(n,i)==1)
                printf("%d ", i);
        }
    }
    return 0;
 }
 int gcd(int a, int b)
 {
      if (a==b)
      {
           return a;
      }
      else if(a<b)
      {
          return gcd(a, b-a);
      }
      else
      {
           return gcd(a-b, b);
      }
   }

【讨论】:

  • 此代码可能是正确的,但请说明您更改了什么以及原因。
  • @RetiredNinja ,我将 (int i=0;i
【解决方案2】:

试试这个:

int _gcd(int a, int b)
{
    int c = a % b;
    if (c == 0)
        return b;
    return _gcd(b, c);
}

int gcd(int a, int b)
{
    return a > b ? _gcd(a, b) : _gcd(b, a);
}

除此之外,你显然需要改变这个:

for (i = 0; i <= n; i++)

到这里:

for (i = 1; i < n; i++)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2012-01-29
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多