当前位置: 首页 > 知识库问答 >
问题:

两个整数的幂

盖锐
2023-03-14
int Solution::isPower(int A) {
    if(A == 1)
    {
        return true;
    }
    
    for(int x = 2; x <= sqrt(A); x++)
    {
        unsigned long long product = x * x;
        
        while(product <= A && product > 0)
        {
            if(product == A)
            {
                return true;
            }
            
            product = product * x;
        }
    }
    
    return false;
}

但是,我从geeksforgeeks中找到了另一个解决方案,它只使用对数除法来确定值是否可以用两个整数的幂表示。

bool isPower(int a) 
{ 
    if (a == 1) 
        return true; 
  
    for (int i = 2; i * i <= a; i++) { 
        double val = log(a) / log(i); 
        if ((val - (int)val) < 0.00000001) 
            return true; 
    } 
  
    return false; 
} 

谁能给我解释一下上面的对数解吗?提前谢了。

共有1个答案

蓝恩
2023-03-14

它用数学来解决这个问题。

9=3^2
Log 9 = log 3^2... Adding log at both side
Log 9 = 2 * log 3...using log property
2 = log 9 / log 3

如您所见,最后一条语句相当于代码double val=log(a)/log(i);

然后它检查val-round(Val)是0...如果是真的,Val是ans,否则就不是0。对数不能给出精确的ANS。

 类似资料:
  • 问题内容: 我想要两个整数,一个除以另一个以获得小数或百分比。如何获得这两个整数的百分比或小数?(例如,我不确定是否正确。我可能离…): 这就是我以为自己可以做到的方式,但是它没有用…我想将小数(如果有的话)设为100的百分数,例如,在这种情况下为%25。有任何想法吗? 这是正确的代码(感谢Salvatore Previti!): (顺便说一句,我正在使用此项目进行测验程序,这就是为什么我需要百分

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案:

  • 有没有一个相当标准的C(Linux)函数,或者一种代码高效但性能良好的方法来比较任意大小的两个整数? 我正在寻找一些参数为int intcmp(const void*a,const void*b,size\t size)的东西,它适用于任何实际大小的整数。(如果架构是big-endian的话(我认为)可以工作。) 我倾向于使用这样的实现(通过高效整数比较函数的改进),但它不是完全通用的,并且有足够

  • 我是一名编程学生,我在这个问题上遇到了很多麻烦: “完成一个静态方法multipleof,它接受两个int参数number和count。方法体必须返回一个包含number的第一个计数倍数的int数组。例如,

  • 我想求两个整数之间的偶数奇偶数的个数。以下是我目前所写的内容: 这个很管用。但是,和这两个整数之间的差值可能高达,这意味着类似这样的解决方案是行不通的。是否有一个更有效的,即解决方案来解决这个问题?