-- 예전 기록/BOJ

[ BOJ ] 11966 : 2의 제곱인가? ( BRONZE 3 ) / C, Python

rejo 2023. 11. 7. 10:50

문제

자연수 N이 주어졌을 때, 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 2^30)이 주어진다.

출력

N이 2의 제곱수면 1을 아니면 0을 출력하는 프로그램을 작성하시오.

풀이 과정

1이 될 때 까지 N을 2로 나눴을 때 나머지가 0 외에 발생하지 않는다면 2의 제곱수이다.

2의 제곱수는 2가 여러 번 곱해진 꼴이기에, 2로 나눴을 때 나머지가 0 외에 발생한다면 2의 제곱수가 아니다.

 

C

#include <stdio.h>

int main(void) {
    int n;
    scanf("%d", &n);

    int result = 1;
    while (n > 1) {
        if (n % 2 != 0) {
            result = 0;
            break;
        }
        n /= 2;
    }

    printf("%d", result);
    return 0;
}

Python

n = int(input())
done = 0
while n > 1:
    if n % 2 == 1: 
        done = 1
        break
    n //= 2

if done == 0: print(1)
else: print(0)