我正在尝试实现Karatsubamultiplication通过递归调用。下面的代码应该可以工作,但我总是得到错误的答案。有什么想法吗?publicstaticlongkaratsuba(longx,longy){//basecase:if(x下面是一些测试用例:1)karatsuba(1234,5678)>>>6952652*应该是70066522)karatsuba(4589,7831)>>>34649459*应该是359364593)karatsuba(911,482)>>>44722*应该是472842 最佳答案 您的方法有
我一直在尝试在不使用BigInteger的情况下在Java中实现Karatsuba算法。我的代码仅适用于两个整数相同且位数相同的情况。我没有得到正确的答案,但是我得到的答案非常接近正确的答案。例如我在12*12时得到149。我无法弄清楚我的代码有什么问题,因为我相信我所做的一切都是正确的(按照书本)。这是我的代码。publicstaticvoidmain(String[]args){longans=karatsuba(12,12);System.out.println(ans);}privatestaticlongkaratsuba(longi,longj){if(i编辑:感谢Ziya
先介绍一下背景:-我是第一次发布海报,是一名大学学生(不是编程专业)。-这不是作业题,我只是为了好玩才这样做。-我的编程经验包括一个学期(3个月)的C++和高中的一些QBasic。-是的,我查看了GMP和Bignum库;从原始代码中学习东西非常困难,尤其是在不了解程序员意图的情况下。此外,我想自己学习如何做。我正在为任意大的整数编写一个乘法函数。我使用字符数组来表示这些数字,末尾有一个+或-作为标记(例如“12345+”、“31415-”)。我目前正在实现Karatsuba算法。问题是使用递归和动态内存分配,该函数比原始方法慢5倍。我可以使用一些关于如何减少运行时间的提示。char*d
我在AVX2上工作,需要计算64位x64位->128位加宽乘法,并以最快的方式获得64位高位部分。由于AVX2没有这样的指令,我使用Karatsuba算法来提高效率和速度是否合理? 最佳答案 没有。在现代架构上,Karatsuba击败教科书乘法的交叉点通常介于8到24个机器字之间(例如,在x86_64上介于512到1536位之间)。对于固定大小,阈值位于该范围的较小端,新的ADCX/ADOX指令可能会使其在标量代码中更进一步,但64x64仍然太小,无法从Karatsuba中受益。 关于c
我正在尝试用C++实现Karatsuba乘法算法,但现在我只是想让它在Python中运行。这是我的代码:defmult(x,y,b,m):ifmax(x,y)我不明白的是:z2、z1和z0应该如何创建?使用mult函数是否递归正确?如果是这样,我在某个地方搞砸了,因为递归没有停止。谁能指出错误在哪里? 最佳答案 NB:theresponsebelowaddressesdirectlytheOP'squestionaboutexcessiverecursion,butitdoesnotattempttoprovideacorrectK
我想实现Karatsuba's2-splitmultiplication在Python中。但是,在表格中写数字A=c*x+d其中x是接近sqrt(A)的底的幂(令x=b^m)。如果我什至不能使用除法和乘法,我应该如何找到x?我应该计算位数并将A向左移动位数的一半吗?谢谢。 最佳答案 差不多。您不会将A移动一半的位数;你移动1。当然,这只有在基数是2的幂时才有效,因为基数10的“移动”(例如)必须通过乘法来完成。(编辑:嗯,好的,您可以通过移位和加法进行乘法运算。但是使用2的幂就简单多了。)如果您使用的是Python3.1或更高版本,