我已经实现了两个字节数组的乘法,效果很好。更准确地说,我需要将一个64字节的操作数与一个32字节的操作数相乘。
我采用最简单的方法:使用双重循环,计算每个数组中每个字节的乘积。所以对于特定的值,需要2048步(即64 * 32)。
我尝试使用Karatsuba方法进行优化。所以我按照以下方式进行:
a长度为64字节,b长度为32字节。
我们将a拆分为:a = p * 16^(32) + q (因此p和q都有32字节长度),并计算:a * b = p * b * 16^(32) + q * b(使用之前描述的函数计算乘积)。
我得到了正确的结果,但计算时间与以前相同:2个32字节数组的乘积:32 * 32 * 2 = 64 * 32 = 2048。
我的问题是:为了使用Karatsuba优化我的乘法,我应该完全递归编程吗?换句话说,其他方式永远不会更快?
谢谢您的帮助 :)
我采用最简单的方法:使用双重循环,计算每个数组中每个字节的乘积。所以对于特定的值,需要2048步(即64 * 32)。
我尝试使用Karatsuba方法进行优化。所以我按照以下方式进行:
a长度为64字节,b长度为32字节。
我们将a拆分为:a = p * 16^(32) + q (因此p和q都有32字节长度),并计算:a * b = p * b * 16^(32) + q * b(使用之前描述的函数计算乘积)。
我得到了正确的结果,但计算时间与以前相同:2个32字节数组的乘积:32 * 32 * 2 = 64 * 32 = 2048。
我的问题是:为了使用Karatsuba优化我的乘法,我应该完全递归编程吗?换句话说,其他方式永远不会更快?
谢谢您的帮助 :)
BigInteger
来表示大数? - isnot2bad