Java 大整数方程的求解

Java 大整数方程的求解,java,math,biginteger,Java,Math,Biginteger,设a和b为已知的大整数[长度均为308]。我想用Java在方程a^x=b中找到大整数x 从数学上讲,通过在上述方程的两侧取对数,我可以将其简化如下 x · log2(a) = log2(b) 上述简化方程可编程。但是Math.log仅支持双精度值,不支持大整数。我在寻找其他函数来计算这个 如何计算大整数x的值。任何帮助都将不胜感激。我猜这是家庭作业,作业的重点是让您实现一个迭代算法,该算法首先对x进行粗略猜测g,计算a^g,然后根据结果调整g,迭代直到g收敛到x本身。您希望得到准确的结果吗?一

a
b
为已知的大整数[长度均为308]。我想用Java在方程
a^x=b
中找到大整数
x

从数学上讲,通过在上述方程的两侧取对数,我可以将其简化如下

x · log2(a) = log2(b)
上述简化方程可编程。但是
Math.log
仅支持双精度值,不支持大整数。我在寻找其他函数来计算这个


如何计算大整数x的值。任何帮助都将不胜感激。

我猜这是家庭作业,作业的重点是让您实现一个迭代算法,该算法首先对
x
进行粗略猜测
g
,计算
a^g
,然后根据结果调整
g
,迭代直到
g
收敛到
x
本身。您希望得到准确的结果吗?一般来说,这个等式中没有任何东西可以保证x是一个整数。如果x太大以至于一个尾数为53位的double不够,那么至少需要2^53位=1个pebibyte来存储右边的b。这感觉不太可能有实际意义。我们在这里遗漏了一些细节吗?仅供参考:实际上,在我的EIGamal中,我将g^x==y等价,其中y是公钥。这里g和y的长度为308。由于g和y的值很长,我试图找到一种方法来计算xIf,如果g和y都是308位(?)长,而不计算前导零,那么x是1。即使308位数字的二次幂(平方)也有大约616位。如果这与ElGamal有关,那么你的方程很可能只包含其他整数的模,这是设置的关键部分。这样的话,你的问题就相当于询问一种计算结果的方法。高效计算被认为是困难的,许多公钥密码依赖于这一假设。如果a和b只有308位,那么作为@JamesReinstateMonicaPolk的二等分,这是我一直在思考的“尝试和错误”,将猜测细化到每次迭代至少一位,对于许多应用来说,这将是相当快的。我想是10毫升。一个好的开始猜测是log2(b)/log2(A),其中日志由比特数近似。