我写了一个乘法大数函数,我想改变它来计算大数字的力量。
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相同。
答案 0 :(得分:1)
我不知道一种简单的并行化方法,但你绝对可以减少乘法次数。考虑数字的二进制表示的最简单方法(我对缺少MathJax的道歉):
首先计算(通过与自身的连续乘法):
然后乘以所需的三个。这从24次乘法减少到7次乘法。对于非常大的功率,节省的速度相当快,尽管时间变化很大,取决于功率中的位数。
如果您能够找到一个分区,以便您只有一次更大的指数,您会发现可以优化该过程: