如何确定十进制数的完美幂?

时间:2019-01-05 19:34:42

标签: c++

我正在研究一个问题,该问题检查数字是否可以表示为完美幂。有正整数可用的解决方案。我将其微调以检查负整数。如何进一步调整以测试十进制数字(例如0.008或49.49)?

// Returns true if n can be written as x^y 
bool isPower(int n) 
{ 
if(n<0){
    for (int x=-2; x>=n; x--) 
    { 
        int p = x; 
        while (p >= n) 
        { 
            p *= x; 
            if (p == n) 
                return true; 
        } 
    } }
if(n > 0)
{
for (int x=2; x<=sqrt(n); x++) 
    { 
        int p = x; 
        while (p <= n) 
        { 
            p *= x; 
            if (p == n) 
                return true; 
        } 
    } 
}
    return false; 
}

1 个答案:

答案 0 :(得分:0)

如果您将研究限于有理数,即p/q的形式为pq整数,则可能有解决方案。

尝试对非有理数进行运算没有实际意义。例如,22^1/2的幂。

第一步是以这种合理的形式表示您的数字,例如0.008 = 8/10000.09 = 9/100。最有效的方法是使用连续分数。您可以在SO网站上找到有关该主题的几篇文章。如果效率不是一个大问题,您可以使用简单的for循环来找到这种合理的表示形式。但是,请注意引入余量,要考虑到舍入误差或数字表示误差。 0.1111111仅近似等于1/9。对于以下内容,pq是相对质数也很重要。使用连续分数法可以确保这一点。

在那之后,您只需要对分母和分母部分的整数使用方法。如果每个人的权力相同,那么可以肯定地得出结论。

例如0.008 = 8/1000 = 2^3/10^3 = (2/10)^3 = 0.2^30.09 = 9/100 = 3^2/10^2 = (3/10)^2 = 0.3^2

注意:另一种方法是使用pq的素分解。