java中最快的分解过程

时间:2013-05-17 16:21:29

标签: java algorithm factorization

我正在用java编写一个程序,用于计算给定值的sqrt,最大为10 ^ 100 。为此,我知道我必须使用BigInteger,但我处理的过程效率不高,因为它需要花费很多时间。分解数字来处理程序的最快过程是什么?什么是更快的算法?

提前致谢。

1 个答案:

答案 0 :(得分:0)

首先,我希望您意识到大多数输入值都没有平方根的精确整数答案!你确定要用BigInteger而不是BigDecimal吗?

你确定不希望迭代每个值到n。您需要一种方法来更快地改善您的答案。一个简单的方法是对平方根的值进行初始猜测(我推荐n / 2),并找到它的辅因子(n / guess)。如果它们相等就完成了,如果它们不相等,则将猜测更新为猜测的平均值及其辅助因子 - 其中一个将大于实际的平方根,另一个将是因此,平均值会产生更接近实际平方根的值。泡沫,冲洗,重复。如果没有精确的平方根,则当因子和辅因子在1之间时停止。

附录:这里是伪代码(实际上是Ruby,但这几乎是一样的):

def sqrt(n)
  guess = n / 2
  cofactor = 2
  loop do
    cofactor = n / guess
    break if (guess - cofactor).abs <= 1
    guess = (guess + cofactor) / 2
  end
  return [guess, cofactor].min
end

翻译到Java应该非常简单。