mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Power of 4 (#9505)
* added power_of_4 * updated power_of_4 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated power_of_4 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated power_of_4 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated power_of_4 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated power_of_4 * added type check * added tescase --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
e7a59bfff5
commit
c8f6f79f80
67
bit_manipulation/power_of_4.py
Normal file
67
bit_manipulation/power_of_4.py
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
"""
|
||||||
|
|
||||||
|
Task:
|
||||||
|
Given a positive int number. Return True if this number is power of 4
|
||||||
|
or False otherwise.
|
||||||
|
|
||||||
|
Implementation notes: Use bit manipulation.
|
||||||
|
For example if the number is the power of 2 it's bits representation:
|
||||||
|
n = 0..100..00
|
||||||
|
n - 1 = 0..011..11
|
||||||
|
|
||||||
|
n & (n - 1) - no intersections = 0
|
||||||
|
If the number is a power of 4 then it should be a power of 2
|
||||||
|
and the set bit should be at an odd position.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def power_of_4(number: int) -> bool:
|
||||||
|
"""
|
||||||
|
Return True if this number is power of 4 or False otherwise.
|
||||||
|
|
||||||
|
>>> power_of_4(0)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: number must be positive
|
||||||
|
>>> power_of_4(1)
|
||||||
|
True
|
||||||
|
>>> power_of_4(2)
|
||||||
|
False
|
||||||
|
>>> power_of_4(4)
|
||||||
|
True
|
||||||
|
>>> power_of_4(6)
|
||||||
|
False
|
||||||
|
>>> power_of_4(8)
|
||||||
|
False
|
||||||
|
>>> power_of_4(17)
|
||||||
|
False
|
||||||
|
>>> power_of_4(64)
|
||||||
|
True
|
||||||
|
>>> power_of_4(-1)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: number must be positive
|
||||||
|
>>> power_of_4(1.2)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
TypeError: number must be an integer
|
||||||
|
|
||||||
|
"""
|
||||||
|
if not isinstance(number, int):
|
||||||
|
raise TypeError("number must be an integer")
|
||||||
|
if number <= 0:
|
||||||
|
raise ValueError("number must be positive")
|
||||||
|
if number & (number - 1) == 0:
|
||||||
|
c = 0
|
||||||
|
while number:
|
||||||
|
c += 1
|
||||||
|
number >>= 1
|
||||||
|
return c % 2 == 1
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user