python - 关于karatsuba乘法的问题

标签 python algorithm math

我想实现 Karatsuba's 2-split multiplication在 Python 中。但是,在表格中写数字

A=c*x+d

其中 x 是接近 sqrt(A) 的底的幂 (令 x=b^m)。

如果我什至不能使用除法和乘法,我应该如何找到 x?我应该计算位数并将 A 向左移动位数的一半吗?

谢谢。

最佳答案

差不多。您不会将 A 移动一半的位数;你移动 1。当然,这只有在基数是 2 的幂时才有效,因为基数 10 的“移动”(例如)必须通过乘法来完成。 (编辑:嗯,好的,您可以通过移位和加法进行乘法运算。但是使用 2 的幂就简单多了。)

如果您使用的是 Python 3.1 或更高版本,计算位数很容易,因为 3.1 引入了 int.bit_length() 方法。对于其他版本的 Python,您可以通过复制 A 并将其右移直到它为 0 来计算位数。这可以使用一种二进制搜索方法在 O(log N) 时间(N = # of digits)中完成 - 移位许多位,如果它是 0 则太多,等等。

关于python - 关于karatsuba乘法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461496/

相关文章:

algorithm - 应该使用哪种排序算法在 O(n) 中运行?

algorithm - 根据给定算法计算 Big-O

python - 为什么 math.inf 是 float ,为什么我不能将它转换为整数?

sql - GUID 有没有可能全部用完?

python lxml 在 dev_appserver(gae,windows)中不可用

python - 在 xarray 中 apply_ufunc 之后将维度移动到原始顺序?

objective-c - View 中 View 的网格或平铺算法

python - 为什么不能像定义中那样实现定点组合器?

python - 先知Python ValueError : Regressor missing from dataframe

c# - 数学舍入问题总计 > 100%