![2의 n제곱 수인지 판별하기 포스팅 썸네일 이미지](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLqQ1x%2FbtqMBv0wSG1%2FK8jKzZtMmUA020pSb5mtGK%2Fimg.png)
C++/Algorithm
2의 n제곱 수인지 판별하기
1. 개 요 2의 n제곱 수를 2진수로 나타낸다면 2의 1제곱 2 -> 10 2의 4제곱 16 -> 10000 2의 6제곱 64 -> 1000000 2의 0제곱 1 -> 1 와 같이 1로 시작하며 오른쪽의 0이 채워지는 형태이다. 그렇다면 이제 각 수에서 1을 뺀 수를 2진수로 나타내보면 (2의 1제곱-1) 1 -> 1 (2의 4제곱-1) 15 -> 1111 (2의 6제곱-1) 63 -> 111111 (2의 0제곱-1) 0 -> 0 그러면 여기서 0제곱을 제외하고는 1로 2진수가 1로 이루어진 것을 확인 할 수 있다. 그렇다면 이와 같은 사실을 이용하여서 임의의 수 n이 2의 제곱수인지 판별할 수 있다. 임의의 수 n과 n-1를 비트 연산자 &를 사용하여 연산하면 n이 2의 제곱 수인 경우 그 결과 0이..