>  기사  >  백엔드 개발  >  정수를 사용하여 숫자가 완전제곱수인지 효율적으로 판단할 수 있는 방법은 무엇입니까?

정수를 사용하여 숫자가 완전제곱수인지 효율적으로 판단할 수 있는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 10:17:02323검색

How Can We Efficiently Determine if a Number is a Perfect Square Using Integers?

완전제곱식 식별을 위한 효율적인 정수 기반 접근 방식

숫자가 완전제곱수인지 확인하려면 다음을 사용하지 않아도 됩니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.