gpt4 book ai didi

c# - 计算 BigInteger 的平方根 (System.Numerics.BigInteger)

转载 作者:IT王子 更新时间:2023-10-29 04:16:37 29 4
gpt4 key购买 nike

.NET 4.0 为任意大的整数提供了 System.Numerics.BigInteger 类型。我需要计算 BigInteger 的平方根(或合理的近似值——例如整数平方根)。这样我就不必重新实现轮子,有人对此有很好的扩展方法吗?

最佳答案

Check if BigInteger is not a perfect square具有计算 Java BigInteger 的整数平方根的代码。这里翻译成C#,作为扩展方法。

    public static BigInteger Sqrt(this BigInteger n)
{
if (n == 0) return 0;
if (n > 0)
{
int bitLength = Convert.ToInt32(Math.Ceiling(BigInteger.Log(n, 2)));
BigInteger root = BigInteger.One << (bitLength / 2);

while (!isSqrt(n, root))
{
root += n / root;
root /= 2;
}

return root;
}

throw new ArithmeticException("NaN");
}

private static Boolean isSqrt(BigInteger n, BigInteger root)
{
BigInteger lowerBound = root*root;
BigInteger upperBound = (root + 1)*(root + 1);

return (n >= lowerBound && n < upperBound);
}

非正式测试表明,对于小整数,这比 Math.Sqrt 慢 75 倍。 VS 分析器将 isSqrt 中的乘法指向热点。

关于c# - 计算 BigInteger 的平方根 (System.Numerics.BigInteger),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432412/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com