📌  相关文章
📜  Java程序判断一个否是否是二的幂

📅  最后修改于: 2022-05-13 01:58:09.464000             🧑  作者: Mango

Java程序判断一个否是否是二的幂

给定一个正整数,编写一个函数来判断它是否是 2 的幂。
例子 :

Input : n = 4
Output : Yes
22 = 4

Input : n = 7
Output : No

Input : n = 32
Output : Yes
25 = 32

1.一个简单的方法是简单地取以 2 为底的数字的对数,如果你得到一个整数,那么数字就是 2 的幂。

Java
// Java Program to find whether a
// no is power of two
class GFG {
    /* Function to check if x is power of 2*/
    static boolean isPowerOfTwo(int n)
    {
        return (int)(Math.ceil((Math.log(n) / Math.log(2))))
            == (int)(Math.floor(((Math.log(n) / Math.log(2)))));
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        if (isPowerOfTwo(31))
            System.out.println("Yes");
        else
            System.out.println("No");
 
        if (isPowerOfTwo(64))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by mits


Java
// Java program to find whether
// a no is power of two
import java.io.*;
 
class GFG {
 
    // Function to check if
    // x is power of 2
    static boolean isPowerOfTwo(int n)
    {
        if (n == 0)
            return false;
 
        while (n != 1) {
            if (n % 2 != 0)
                return false;
            n = n / 2;
        }
        return true;
    }
 
    // Driver program
    public static void main(String args[])
    {
        if (isPowerOfTwo(31))
            System.out.println("Yes");
        else
            System.out.println("No");
 
        if (isPowerOfTwo(64))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Nikita tiwari.


Java
// Java program to efficiently
// check for power for 2
 
class Test {
    /* Method to check if x is power of 2*/
    static boolean isPowerOfTwo(int x)
    {
        /* First x in the below expression is
        for the case when x is 0 */
        return x != 0 && ((x & (x - 1)) == 0);
    }
 
    // Driver method
    public static void main(String[] args)
    {
        System.out.println(isPowerOfTwo(31) ? "Yes" : "No");
        System.out.println(isPowerOfTwo(64) ? "Yes" : "No");
    }
}
// This program is contributed by Gaurav Miglani


输出:
No
Yes

时间复杂度: O(log 2 n)

辅助空间: O(1)

2.另一种解决方案是不断将数字除以 2,即迭代地执行 n = n/2。在任何迭代中,如果 n%2 变为非零且 n 不是 1,则 n 不是 2 的幂。如果 n 变为 1,则它是 2 的幂。

Java

// Java program to find whether
// a no is power of two
import java.io.*;
 
class GFG {
 
    // Function to check if
    // x is power of 2
    static boolean isPowerOfTwo(int n)
    {
        if (n == 0)
            return false;
 
        while (n != 1) {
            if (n % 2 != 0)
                return false;
            n = n / 2;
        }
        return true;
    }
 
    // Driver program
    public static void main(String args[])
    {
        if (isPowerOfTwo(31))
            System.out.println("Yes");
        else
            System.out.println("No");
 
        if (isPowerOfTwo(64))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Nikita tiwari.
输出:
No
Yes

3.两个数的所有幂都只有一个位集。所以数数。设置位的数量,如果您得到 1,则数字是 2 的幂。请参阅以整数计数设置位以计算设置位。
4.如果我们将 2 的幂减 1,则唯一设置位之后的所有未设置位都将被设置;设置位变为未设置。
例如对于 4 ( 100) 和 16(10000),我们在减去 1 后得到以下结果
3 –> 011
15 –> 01111
因此,如果数字 n 是 2 的幂,则 n 和 n-1 的按位 & 将为零。我们可以说 n 是 2 的幂或不是基于 n&(n-1) 的值。当 n 为 0 时,表达式 n&(n-1) 将不起作用。为了处理这种情况,我们的表达式将变为 n& (!n&(n-1)) (感谢 https://www.geeksforgeeks.org/program - 查找是否不属于二的幂/穆罕默德添加这个案例)。
下面是这个方法的实现。

Java

// Java program to efficiently
// check for power for 2
 
class Test {
    /* Method to check if x is power of 2*/
    static boolean isPowerOfTwo(int x)
    {
        /* First x in the below expression is
        for the case when x is 0 */
        return x != 0 && ((x & (x - 1)) == 0);
    }
 
    // Driver method
    public static void main(String[] args)
    {
        System.out.println(isPowerOfTwo(31) ? "Yes" : "No");
        System.out.println(isPowerOfTwo(64) ? "Yes" : "No");
    }
}
// This program is contributed by Gaurav Miglani
输出:
No
Yes

有关详细信息,请参阅有关程序的完整文章以查找否是否是二的幂!