완전제곱식 식별을 위한 효율적인 정수 기반 접근 방식
숫자가 완전제곱수인지 확인하려면 다음을 사용하지 않아도 됩니다. math.sqrt(x) 또는 x**0.5와 같은 부동 소수점 계산. 이러한 접근 방식은 특히 크기가 큰 정수의 경우 부정확성을 초래할 수 있습니다. 대신 아래의 정수 기반 방법을 고려해 보세요.
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
이 알고리즘은 제곱근 계산에 "바빌로니아 알고리즘"을 활용합니다. x와 apositint//x의 평균을 반복적으로 계산하여 점차적으로 apositivint의 제곱근에 접근합니다. 표시된 집합을 포함하면 솔루션의 수렴을 보장하면서 잠재적인 무한 루프를 방지할 수 있습니다.
이 방법의 효율성을 설명하려면 다음 예를 고려하세요.
for i in range(110, 130): print i, is_square(i)
출력:
110 True 111 False 112 True 113 False 114 True 115 False 116 True 117 False 118 True 119 False 120 True 121 False 122 True 123 False 124 True 125 False 126 True 127 False 128 True 129 False
추가 시연으로 알고리즘을 보다 실질적인 정수에 적용할 수 있습니다.
x = 12345678987654321234567 ** 2 for i in range(x, x+2): print i, is_square(i)
출력:
152415789666209426002111556165263283035677489 True 152415789666209426002111556165263283035677490 False
부동 소수점 계산이 편리하지만, 즉각적으로 드러나지 않는 부정확성을 초래할 수 있습니다. 정확한 결과를 얻기 위해 바빌로니아 알고리즘과 같은 정수 기반 접근 방식은 숫자가 완전 제곱수에 해당하는지 확인하는 보다 안정적이고 효율적인 솔루션을 제공합니다.
위 내용은 정수를 사용하여 숫자가 완전제곱수인지 효율적으로 판단할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!