c# - C# 的标准库是否有简单的方法来检查一个数字是否是另一个数字的幂?

标签 c# .net algorithm

我正在尝试看看是否有一种好方法可以找到给定 ints bn 是否存在int a 这样 a^n=b。换句话说,比我在下面写的糟糕的解决方案更有效

private static bool HasBase(int b, int n)
{
    for(int a = 1; a <= int.MaxValue; ++a)
    {
        int pow = Power(a, n);
        if(pow == b)
            return true;
        else if(pow > b)
            return false;
    }
    return false;   
}

private static int Power(int a, int n) 
{
    return Enumerable.Range(a, n).Aggregate(1, (prev, cur) => prev * cur);
}

最佳答案

它有 Math.log(double, double) 函数,它在第二个数字的基数中找到第一个数字的对数。如果那是完整的,那就是一种力量。例如,如果我想知道 x 是否是 2 的幂,我可以这样写:

bool isAPower = (Decimal)(Math.Log(x,2))%1==0;

换句话说,取x的对数底数2,如果我将它除以1求余数。如果 mod 为 0 则为真,如果不为 0 则为假。

关于c# - C# 的标准库是否有简单的方法来检查一个数字是否是另一个数字的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43666362/

相关文章:

c# - WPF:PropertyChangedCallback 只触发一次

string - 比较两个字符串(以 nul 结尾)而不是逐字节比较?

c++ - 编程练习的回溯解决方案(安装管道)

c# - NHibernate 和 AutoMapper 不能正常运行 : "a different object with the same identifier value was already"

c# - 如何使用 C# 取消散列?

C#:通过电子邮件发送支持请求的最佳方法是什么?

algorithm - Dijkstra 算法对于计算单源最短路径是否最有效?

c# - 如何在我的 Windows Mobile 应用程序中显示模态对话框?

c# - 在 .NET 应用程序中检测重定向控制台输出中的关闭管道

.net - .NET 类有什么关于调用它的信息?