【问题标题】:Fastest factorization process in java [closed]java中最快的分解过程[关闭]
【发布时间】:2013-05-17 16:21:29
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 你有没有尝试过任何算法?如果是,那么您可以发布您尝试过的内容吗?
  • 是的...我尝试了一般的除法过程 for(i=0;i
  • 什么是 nprintf()C ,而不是 Java,尽管它无关紧要!!!
  • 所以你不需要一个通用的分解算法,只需要一个平方根?

标签: java algorithm factorization


【解决方案1】:

首先,我希望您意识到大多数输入值不会有平方根的精确整数答案!您确定要使用 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 应该很简单。

【讨论】:

  • 好主意...你能借我一些实现吗?不管怎样,ans 总是 Integer/BigInteger
猜你喜欢
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2015-08-21
相关资源
最近更新 更多