Pendekatan Berasaskan Integer yang Cekap untuk Mengenalpasti Kuasa Dua Sempurna
Untuk memastikan sama ada sesuatu nombor merupakan kuasa dua sempurna, seseorang boleh mengetepikan penggunaan pengiraan titik terapung seperti math.sqrt(x) atau x**0.5. Pendekatan ini boleh memperkenalkan ketidaktepatan, terutamanya untuk integer yang besar. Sebaliknya, pertimbangkan kaedah berasaskan integer di bawah:
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
Algoritma ini memanfaatkan "algoritma Babylon" untuk mengira punca kuasa dua. Ia secara berulang mengira purata x dan apositiveint//x untuk menghampiri secara beransur-ansur punca kuasa dua apositiveint. Kemasukan set yang dilihat menghalang potensi gelung tak terhingga sambil memastikan penumpuan penyelesaian.
Untuk menggambarkan keberkesanan kaedah ini, pertimbangkan contoh berikut:
for i in range(110, 130): print i, is_square(i)
Output:
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
Sebagai demonstrasi lanjut, kami boleh menggunakan algoritma untuk lebih banyak integer:
x = 12345678987654321234567 ** 2 for i in range(x, x+2): print i, is_square(i)
Output:
152415789666209426002111556165263283035677489 True 152415789666209426002111556165263283035677490 False
Walaupun pengiraan titik terapung mudah, mereka boleh memperkenalkan ketidaktepatan yang mungkin tidak dapat dilihat dengan segera. Untuk mendapatkan hasil yang tepat, pendekatan berasaskan integer seperti algoritma Babylon menyediakan penyelesaian yang lebih andal dan cekap untuk menyemak sama ada sesuatu nombor itu layak sebagai kuasa dua sempurna.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menentukan dengan Cekap sama ada Nombor ialah Segiempat Sempurna Menggunakan Integer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!