当前位置: 首页 > 知识库问答 >
问题:

如何编写一个简单的Java程序,找出两个数字之间的最大公约数?[重复]

阎建中
2023-03-14

问题是:

“编写一个名为gcd的方法,该方法接受两个整数作为参数,并返回两个数字中的最大公约数。两个整数a和b的最大公约数(gcd)是a和b的最大整数。任何数字和1的gcd都是1,任何数字和0的gcd都是该数字。

计算两个数字的GCD的一种有效方法是使用欧几里德算法,该算法说明如下:

GCD(A, B) = GCD(B, A % B) 
GCD(A, 0) = Absolute value of A"

我真的不知道如何解决这个问题。我只是想要一些提示和提示,关于我目前为止在程序中做错了什么。(我必须放入扫描仪,这是我老师的要求。)不要给我一个完整的代码,因为我有点想自己解决这个问题。也许只要给我一个提示,告诉我如何整合你上面看到的这个公式。(如果你想知道我为什么输入==0,那是因为我认为如果你有两个数字,比如0和90,它们的GCD应该是0,对吗??)

此外,我的代码必须包含while循环。。。我更希望如果循环。。。

提前感谢!:)

我目前的计划:

public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int a = console.nextInt();
        int b = console.nextInt();
        gcd (a, b);
    }

    public static void gcd(int a, int b) {
        System.out.print("Type in two numbers and I will print outs its Greatest Common Divisor: ");
        int gcdNum1 = console.nextInt();
        int gcdNum2 = console.nextInt();
        while (gcdNum1 == 0) {
            gcdNum1 = 0;
        }
        while (gcdNum2 > gcdNum1) {
            int gcd = gcdNum1 % gcdNum2;
        }
        System.out.print(gcdNum1 + gcdNum2);
    }
}

共有3个答案

秦哲瀚
2023-03-14
public static int GCD(int x, int y) {   
    int r;
    while (y!=0) {
        r = x%y;
        x = y;
        y = r;
    }
    return x;
}
常英资
2023-03-14

你也可以用三行的方法来做:

public static int gcd(int x, int y){
  return (y == 0) ? x : gcd(y, x % y);
}

这里,如果y=0,则返回x。否则,将使用不同的参数值再次调用gcd方法。

淳于嘉树
2023-03-14

递归方法是:

static int gcd(int a, int b)
{
  if(a == 0 || b == 0) return a+b; // base case
  return gcd(b,a%b);
}

使用的是当循环:

static int gcd(int a, int b)
{
  while(a!=0 && b!=0) // until either one of them is 0
  {
     int c = b;
     b = a%b;
     a = c;
  }
  return a+b; // either one is 0, so return the non-zero value
}

当我返回ab时,我实际上是在返回非零数,假设其中一个是0。

 类似资料:
  • 我是Java新手,为了练习,我在互联网上找到了一项任务: "在你输入的两个数字之间找到所有完美的数字。" 顺便说一下——一个完美的数字是一个自然数,等于它所有除数的和。所以我开始工作,遇到了这样一个问题,当我输入两个数字时。 例如:,我在控制台中得到正确答案:。但是,如果第一个数字是,例如,,第二个是,我会将此输出输出到控制台:,而我应该只得到。也就是说,出于某种原因,最小值不会缩短对完美数的搜索

  • 我只能给出一个强力解决方案,即以O(nlogn)时间复杂度对数组进行排序,并取最后100个数字。 面试官在寻找一个更好的时间复杂性,我尝试了几个其他的解决方案,但都没能回答他。有更好的时间复杂性解决方案吗?

  • 所以我在一次在线面试中被要求解决这个问题,但失败了。我立即被拒绝了。我正在试图找出我的算法出了什么问题。 两个最大的数字 用您选择的编程语言编写一个函数,该函数接受一个整数数组并返回前两个最大数字的索引。记录边缘情况下的任何特殊行为(如果有的话)。该函数的运行时间应为其中N是数组的长度和附加空间。 我编写了这个方法来对C#中的数字进行排序: 关于记录边缘案例的特殊行为,我得到了以下回应: 对于数字

  • 本文向大家介绍python如何求解两数的最大公约数,包括了python如何求解两数的最大公约数的使用技巧和注意事项,需要的朋友参考一下 题目: 给定两个自然数,求这两个数的最大公约数。 分析: 单看题目的话,非常简单,我们可以循环遍历自然数,如果能够整除两个自然数,就把这个数记下来,在这些记录中找到最大的一个。 但是这样做有几个缺点:一是做除法计算量比较大,二是遍历所有自然数完全没有必要。另外,如

  • 问题内容: 我一直在努力写两个管道函数,一个可以编译较少的文件,另一个可以合并这些文件。我想学习如何为更复杂的插件编写转换流/管道。 因此,我想知道如何从另一个管道读取数据,以及如何更改该数据并将其发送到下一个管道。这是我到目前为止的内容: 我无法在第二个管道中获得每个文件的。如何发送? 问题答案: 嗯,您不需要在这里使用,您已经获得了文件流(在此处)。 还有一点,您没有将文件发送回管道,所以我想

  • 如何写一个简单的公平锁模拟新的? 自定义不公平锁(我不确定它是否正确)