숫자가 완전제곱수인지 확인하는 것은 간단해 보일 수 있지만 부동 소수점 연산에 의존하는 것은 신뢰할 수 없습니다. 정확성을 위해서는 아래 제시된 것과 같은 정수 기반 접근 방식을 사용하는 것이 중요합니다.
알고리즘은 바빌로니아식 제곱근 계산 방법을 활용합니다. 현재 추정치의 평균과 해당 추정치로 나눈 숫자를 계산하여 반복적으로 제곱근을 추정합니다.
def is_square(apositiveint): x = apositiveint // 2 seen = set([x]) while x * x != apositiveint: x = (x + (apositiveint // x)) // 2 if x in seen: return False seen.add(x) return True
이 방법은 양의 정수에 대해 수렴하는 것으로 입증되었으며 숫자가 완벽하지 않으면 중지됩니다. 루프는 무한정 계속됩니다.
다음은 예:
for i in range(110, 130): print i, is_square(i)
출력:
110 False 111 False 112 False 113 False 114 False 115 False 116 False 117 False 118 False 119 False 120 True 121 True 122 False 123 False 124 False 125 True 126 False 127 False 128 False 129 True
위에서 볼 수 있듯이 알고리즘은 111 및 122와 같은 불완전한 정사각형을 제외하면서 120 및 125와 같은 완전 정사각형을 올바르게 식별합니다.
큰 정수의 경우 부동 소수점 부정확성이 커져 잠재적으로 다음과 같은 문제가 발생할 수 있습니다. 잘못된 결과. 정확성을 보장하려면 이 작업에 부동 소수점 연산을 사용하지 않는 것이 좋습니다.
위 내용은 숫자가 완전제곱수인지 정확하게 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!