我正在编写一个不使用小数的计算器(仅支持有理数),但我希望能够做一个平方根的版本。
当按下(例如)数字12的平方根函数时,我想简化/“减少”平方根并返回2 * sqrt(3) - 由它变为(2 * 2) * 3并将sqrt(2 * 2)提取为2。
我正在使用biginteger,它有一个非常好的gcd()方法和一个仅限于正参数的pow()方法(这是有道理的,除非你试图做我正在尝试做的事情。
我可以想出几种迭代的方法来做到这一点但是它们可能需要一段时间才能显示数百位数的数字。
我希望有一些可爱的,简单的,非迭代的技巧我没有接触过。
只是为了澄清:我有意添加虚数,所以我计划这样的结果:
17 + 4i √3
-----------
9
没有长的小数点流。
答案 0 :(得分:4)
你要问的是,实质上是找到所有重复的素因子。既然你正在处理数百位数的数字,那么我想冒昧地猜测一般来说没有好的方法可以做到这一点。否则,公钥密码术将突然变得不稳定。
有许多methods of computing the square root。有了这些,您可以将结果表示为整数加上小于1的余数。
答案 1 :(得分:0)
也许尝试找到一个小于你的数字的最高完美正方形。这将给你一部分等式,然后你只需要处理剩余部分,这是你的数字和你找到的完美方格之间的差异。随着数字变大,这会降低,但可能不会那么快。