숫자 n과 다른 값 x가 있다고 가정하고 x의 거듭제곱인지 아닌지 확인해야 합니다. 여기서 x는 2의 거듭제곱입니다.
따라서 입력이 n =32768 x =32와 같으면 n이 x^3이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 메인 방법에서 다음을 수행하십시오 -
- cnt :=0
- n이 0이 아니고 (n AND (n - 1))이 0과 같으면
- n> 1일 때 수행
- n =n/2
- cnt :=cnt + 1
- return cnt mod(log c base 2)는 0과 동일합니다.
- n> 1일 때 수행
- 거짓을 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def find_pow_of_2(n): return (1 + find_pow_of_2(n / 2)) if (n > 1) else 0 def solve(n, c): cnt = 0 if n and (n & (n - 1)) == 0: while n > 1: n >>= 1 cnt += 1 return cnt % (find_pow_of_2(c)) == 0 return False n = 32768 x = 32 print(solve(n, x))
입력
32768, 32
출력
True