并行乘以大数

时间:2015-01-28 18:48:25

标签: c#

我写了一个乘法大数函数,我想改变它来计算大数字的力量。

ex:(2321313200000888)^ 25所以我喜欢这样:

public string power(string num1, int n)
{

    Stopwatch timer = new Stopwatch();
    timer.Start();
    string answer= num1;
    for (int i = 1; i < n; i++)
        answer= multiply(num1, answer);

    if (this.InvokeRequired)
    {
        this.richTextBox1.BeginInvoke((MethodInvoker)delegate() { richTextBox1.Text = answer; });
        this.label6.BeginInvoke((MethodInvoker)delegate() { label6.Text = answer.Length.ToString(); });
        this.label2.BeginInvoke((MethodInvoker)delegate() { label2.Text = timer.Elapsed.ToString(); });

    }


    return answer;

我想要并行执行此操作以减少时间我该怎么做?我尝试制作任务,但它与seqential相同。

1 个答案:

答案 0 :(得分:1)

我不知道一种简单的并行化方法,但你绝对可以减少乘法次数。考虑数字的二进制表示的最简单方法(我对缺少MathJax的道歉):

enter image description here

首先计算(通过与自身的连续乘法):

enter image description here

然后乘以所需的三个。这从24次乘法减少到7次乘法。对于非常大的功率,节省的速度相当快,尽管时间变化很大,取决于功率中的位数。

如果您能够找到一个分区,以便您只有一次更大的指数,您会发现可以优化该过程:

enter image description here