Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 超大整数的快速乘法_C#_Java_Integer_Multiplication - Fatal编程技术网

C# 超大整数的快速乘法

C# 超大整数的快速乘法,c#,java,integer,multiplication,C#,Java,Integer,Multiplication,如何将两个大于32个字符的非常大的数字相乘,例如100的乘法!122!或者22^122和11^200借助于分而治之,有人有java代码或C#代码吗?我自己写了一篇文章,用数组来实现这一点,只是为了好玩。我相信Java的BigInteger类也做了同样的事情 是C语言中的一个可能对您有用的示例。 它包括用于大整数乘法的Karatsuba和Schonhage-Strassen算法。您可能应该使用。这允许表示远远超过2^32甚至2^64的整数值。BigInteger值本质上仅受程序可用内存量的限制,

如何将两个大于32个字符的非常大的数字相乘,例如100的乘法!122!或者22^122和11^200借助于分而治之,有人有java代码或C#代码吗?

我自己写了一篇文章,用数组来实现这一点,只是为了好玩。我相信Java的BigInteger类也做了同样的事情

是C语言中的一个可能对您有用的示例。

它包括用于大整数乘法的Karatsuba和Schonhage-Strassen算法。

您可能应该使用。这允许表示远远超过2^32甚至2^64的整数值。BigInteger值本质上仅受程序可用内存量的限制,即32位系统上约4 GB,64位系统几乎可用物理+虚拟内存

import java.math.BigInteger;

class Foo
{
    public static void main(String args[])
    {
        BigInteger bigInteger100Fact = bigFactorial(BigInteger("100")); //where bigFactorial is a user-defined function to calculate a factorial
        BigInteger bigIntegerBar = new BigInteger("12390347425734985347537986930458903458");

        BigInteger product = bigIntegerFact.multiply(bigIntegerBar);
    }
}
编辑:如果您需要使用Karatsuba和Toom Cook的java.lang.BigInteger,这里有一个:


可以使用Schönhage Strassen对大整数进行乘法:

重新标记相关语言阅读乘法算法:“分而治之”听起来像是家庭作业。如果正确,请重新标记。@ThorbjørnRavnAndersen-不推荐使用“家庭作业”标记。@HotLicks不是三年前的事了……请注意,BigInteger使用的是一种简单的乘法算法,因此如果需要大数的快速乘法,应该使用使用使用Karatsuba或其他子n^2算法的第三方库。