标签: greatest-common-divisor

Java:得到最大的公约数

我已经看到这样的功能存在BigInteger,即BigInteger#gcd.Java中是否还有其他函数适用于其他类型(int,longInteger)?这似乎是有意义的java.lang.Math.gcd(有各种各样的重载),但它不存在.它在别的地方吗?


(请不要将此问题与"我如何自己实施"这一问题混淆,请!)

java greatest-common-divisor

78
推荐指数
8
解决办法
19万
查看次数

如何在一组数字上找到GCD,LCM

在一组数字上计算最大公约数和最小公倍数的最简单方法是什么?可以使用哪些数学函数来查找此信息?

java math lcm greatest-common-divisor

62
推荐指数
4
解决办法
13万
查看次数

"近似的"最大公约数

例如,假设您有一个浮点数列表,它大约是常见数量的倍数

2.468,3.700,6.1699

这大约是1.234的倍数.您如何描述这种"近似gcd",您将如何进行计算或估算呢?

与我对这个问题的回答密切相关.

language-agnostic algorithm math floating-point greatest-common-divisor

44
推荐指数
4
解决办法
7644
查看次数

39
推荐指数
3
解决办法
5万
查看次数

JS如何找到最大的公约数

我想找到使用JavaScript的最大公约数.

以前做过那些并愿意分享的人?

javascript math greatest-common-divisor

39
推荐指数
3
解决办法
4万
查看次数

c ++中的GCD函数没有cmath库

我正在写一个混合数字类,需要一个快速简单的"最大公约数"函数.任何人都可以给我代码或代码的链接?

c++ greatest-common-divisor

25
推荐指数
5
解决办法
7万
查看次数

具有多个数的欧几里得算法(GCD)?

所以我正在用Python编写一个程序来获取任意数量的GCD.

def GCD(numbers):

    if numbers[-1] == 0:
        return numbers[0]


    # i'm stuck here, this is wrong
    for i in range(len(numbers)-1):
        print GCD([numbers[i+1], numbers[i] % numbers[i+1]])


print GCD(30, 40, 36)
Run Code Online (Sandbox Code Playgroud)

该函数采用数字列表.这应该打印2.但是,我不明白如何递归使用该算法,因此它可以处理多个数字.谁能解释一下?

更新,仍然无法正常工作:

def GCD(numbers):

    if numbers[-1] == 0:
        return numbers[0]

    gcd = 0

    for i in range(len(numbers)):
        gcd = GCD([numbers[i+1], numbers[i] % numbers[i+1]])
        gcdtemp = GCD([gcd, numbers[i+2]])
        gcd = gcdtemp

    return gcd
Run Code Online (Sandbox Code Playgroud)

好的,解决了

def GCD(a, b):

    if b == 0:
        return a
    else:
        return GCD(b, a % b)
Run Code Online (Sandbox Code Playgroud)

然后使用reduce,就像

reduce(GCD, (30, …
Run Code Online (Sandbox Code Playgroud)

python math greatest-common-divisor

24
推荐指数
4
解决办法
4万
查看次数

RSA:使用扩展欧几里德算法的私钥计算

我是一名高中生,正在写一篇关于RSA的论文,我正在用一些非常小的素数做一个例子.我理解系统是如何工作的,但我不能为我的生活使用扩展的欧几里德算法计算私钥.

这是我到目前为止所做的:

  • 我选择了素数p = 37和q = 89,并计算出N = 3293
  • 我计算过(p-1)(q-1)= 3168
  • 我选择了一个数字e,因此e和3168是相对素数.我正在使用标准的欧几里德算法检查这一点,这非常有效.我的e = 25

现在我只需要计算私钥d,它应该满足ed = 1(mod 3168)

使用扩展欧几里得算法找到d使得de + tN = 1我得到-887•25 + 7•3168 = 1.我把7扔掉,得到d = -887.但是,尝试解密消息时,这不起作用.

我从我的书中知道d应该是2281,并且它有效,但我无法弄清楚它们是如何达到这个数字的.

有人可以帮忙吗?我在过去的4个小时里尝试过解决这个问题,到处寻找答案.我正在手工进行扩展欧几里德算法,但由于结果有效,我的计算应该是正确的.

提前致谢,

MADS

algorithm rsa greatest-common-divisor private-key

20
推荐指数
1
解决办法
2万
查看次数

欧几里德对两个以上数字的最大公约数

有人可以举例说明两个以上数字的最大公约数算法吗?

我相信编程语言并不重要.

algorithm math greatest-common-divisor

14
推荐指数
3
解决办法
1万
查看次数

在没有循环的情况下找到GCD - R.

所以我正在尝试学习R并使用一些资源,包括一本名为"使用R发现统计数据"和其他一些很酷的电子书.

我理解编程中的一个很好的方法是Euclid算法.

在循环中实现它可以像这样实现:

 gcd(x,y) //assuming x is the largest value
 //do
 r = x%y;
 x = y;
 y = r;
 //while r != 0;
 return x;
Run Code Online (Sandbox Code Playgroud)

在Google上进行了几次搜索后,SO和Youtube刷新了我对gcd算法的记忆,我找不到一个不使用循环的内存.甚至递归方法似乎都使用循环.

如何在不使用循环或if语句的情况下在R中实现这一点?

提前致谢.

r greatest-common-divisor

13
推荐指数
2
解决办法
9258
查看次数