完全平方を特定するための効率的な整数ベースのアプローチ
数値が完全平方を構成するかどうかを確認するには、次の関数を使用せずに済みます。 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 と apositiveint//x の平均を繰り返し計算して、apositiveint の平方根を徐々に近似します。見られるセットを含めることで、解の収束を保証しながら潜在的な無限ループを防止します。
この方法の有効性を説明するために、次の例を考えてみましょう。
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 中国語 Web サイトの他の関連記事を参照してください。