c# - 如何在 C# 中以 surd 形式留下根?

标签 c# algebra sqrt

示例a:√12 =2√3

示例b:√16 = 4

我正在努力两者兼得。

虽然我当然可以使用 Math.Sqrt(4) 来实现结果 b,但我不知道如何实现 a ,或者进一步如何让两者同时工作,这就是目标。如何在 C# 中实现这种类型的简化?

我尝试了几个库,包括 MathNet、Symbolics 和 NCalc,但没有成功。 This post可能已经用 C++ 解决了它,尽管我不确定。我尝试转换该解决方案以查看它是否有效,但结果非常失败:

var outside_root = 1;
var inside_root = 800;
var d = 2;
while (d * d <= inside_root)
    if (inside_root % (d * d) == 0)  //# inside_root evenly divisible by d * d
    {
        inside_root = inside_root / (d * d);
        outside_root = (outside_root * d);
    }
while (d * d > inside_root) { 
d = (d + 1);}

感谢您的帮助

最佳答案

给定的 C++ 无需进行大量更改即可转换为 C#。此外,还可以对原始算法进行一些修改,以减少乘法次数并提高整体性能:

    static (int, int) Sqrt2(int n)
    {
        int m = 1, d = 2;

        int dSquared;
        while ((dSquared = d * d) <= n)
        {
            while ((n % dSquared) == 0)
            {
                n /= dSquared;
                m *= d;
            }
            d++;
        }

        return (m, n);
    }

    static void Main(string[] args)
    {
        Console.WriteLine(Sqrt2(12)); // prints (2, 3)
        Console.WriteLine(Sqrt2(16)); // prints (4, 1)
        Console.WriteLine(Sqrt2(13)); // prints (1, 13)
    }

关于c# - 如何在 C# 中以 surd 形式留下根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60468149/

相关文章:

haskell - 我可以通过应用仿函数的组合来模拟短路失败的成功列表吗?

haskell - GADT 的索引初始代数

java - 有没有办法使不同语言的这两个值保持一致?

c# - C# 中有 "upto"方法吗?

c# - 为什么 ReSharper 告诉我 "User.Identity == null"总是错误的?

c# - C#中的类访问

c++ - 平方根元函数?

c# - 从 ContinueWith 中抛出异常

computer-science - 抽象代数与程序设计

c++ - 如何提高小值的定点平方根