【问题标题】:Calculating power of huge numbers in less time在更短的时间内计算大量数字的能力
【发布时间】:2019-09-22 23:26:38
【问题描述】:

我想用 C# 计算大数的幂

我用过这段代码。 它有效,但我想在更短的时间内计算它。

BigInteger a;
a = Math.Pow(4100000000,4100000000);
Console.Writeline(a);

【问题讨论】:

  • 可以分享一下当前时间吗?
  • 你的指数是整数吗(没有小数点)?
  • 我不记得确切但超过2小时。
  • 是的,它是一个整数。
  • 1.不是 C# 编码器,但您确定 Math.Pow(4100000000,4100000000) 是在 BigIntegers 上计算的吗? 2. 你的运算结果是~130925204732 位长。浮动的pow 正在使用log,exp 函数,我希望通过对如此大的数字进行平方,这比整数幂要慢得多。请参阅Power by squaring for negative exponents 无论如何你需要大量的大乘法,所以即使使用Schönhage-Strassen fsqr 也需要时间,所以 2hr 看起来很合理。

标签: c# math biginteger


【解决方案1】:

您可以对此进行测试,但不确定这是否比原生函数 Math.Pow 更快

using System; 

public class GFG{ 

    static float power(float x, int y) 
    { 
        float temp; 

        if( y == 0) 
            return 1; 
        temp = power(x, y/2);  

        if (y % 2 == 0) 
            return temp * temp; 
        else
        { 
            if(y > 0) 
                return x * temp * temp; 
            else
                return (temp * temp) / x; 
        } 
    }  

    // Program to test function power  
    public static void Main() 
    { 
        float x = 2; 
        int y = -3; 

        Console.Write(power(x, y));

        float x = 4100000000; 
        int y = 4100000000; 

        Console.Write(power(x, y)); 

    } 
} 

时间复杂度:O(logn)

空间复杂度:O(1)

算法范式:分而治之。

【讨论】:

  • 当结果是一个非常大的数字时,浮点数不会给出好的结果。
  • 当我尝试使用 100000^100000 时,Math.Pow 需要 3 秒,Power 需要 5 秒
猜你喜欢
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多