숫자 n이 있다고 가정하면 n이 완전제곱수인지 여부를 확인해야 합니다. 완전제곱수 k는 어떤 정수에 대해 k =a *로 나타낼 수 있습니다. 내장된 제곱근 함수를 사용하지 않고 해결해야 합니다.
따라서 입력이 n =121과 같으면 121 =11*11이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
n이 0과 같거나 n이 1과 같으면
-
참을 반환
-
-
시작 :=2
-
stop :=n / 2의 바닥
-
시작하는 동안 <=중지, 수행
-
temp :=처음부터 끝까지 모든 숫자의 목록
-
k :=temp의 중간 요소
-
k_squared :=k * k
-
k_squared가 n과 같으면
-
참을 반환
-
-
k_squared> n이면
-
시작 :=임시[0]
-
중지 :=k - 1
-
-
그렇지 않으면
-
시작 :=k + 1
-
stop :=temp의 마지막 요소
-
-
-
거짓을 반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
def solve(n): if n == 0 or n == 1: return True start = 2 stop = n // 2 while start <= stop: temp = range(start, stop + 1) k = temp[len(temp) // 2] k_squared = k * k if k_squared == n: return True if k_squared > n: start = temp[0] stop = k - 1 else: start = k + 1 stop = temp[-1] return False n = 121 print(solve(n))
입력
121
출력
True