Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah terdapat cara yang mudah untuk menentukan sama ada nombor adalah segi empat sama sempurna tanpa bergantung pada pengiraan titik terapung?
Cara Semak sama ada Nombor ialah Segiempat Sempurna: Penyelaman Terperinci
Pengenalan
Menentukan sama ada nombor yang diberi ialah kuasa dua sempurna ialah operasi matematik biasa. Nombor ialah kuasa dua sempurna jika ia boleh diwakili sebagai kuasa dua integer. Walaupun pengiraan titik terapung menggunakan fungsi punca kuasa dua mungkin kelihatan intuitif, ia memperkenalkan potensi ketidaktepatan. Pendekatan berasaskan integer menawarkan penyelesaian yang lebih tepat.
Algoritma Babylon
Satu kaedah berasaskan integer diilhamkan oleh algoritma Babylon untuk pengiraan punca kuasa dua. Fungsi Python berikut, is_square(), melaksanakan pendekatan ini:
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
Contoh Kerja
Mari kita uji fungsi ini:
for i in range(110, 130): print(i, is_square(i))
Ini akan mencetak status segi empat sama setiap nombor dalam yang ditentukan julat.
Mengendalikan Integer Besar
Untuk integer besar, kaedah ini kekal boleh dilaksanakan, kerana ia beroperasi sepenuhnya pada integer dan mengelakkan had aritmetik titik terapung. Sebagai contoh, kod berikut menyemak sama ada integer besar ialah segi empat sama sempurna:
x = 12345678987654321234567 ** 2 for i in range(x, x+2): print(i, is_square(i))
Melangkaui Pengiraan Titik Terapung
Walaupun pengiraan titik terapung menawarkan kemudahan, mereka boleh menjadi tidak boleh dipercayai untuk semakan segi empat tepat. Pendekatan berasaskan integer seperti algoritma Babylon memberikan hasil yang tepat untuk sebarang nombor positif, tanpa mengira magnitudnya.
Atas ialah kandungan terperinci Adakah terdapat cara yang mudah untuk menentukan sama ada nombor adalah segi empat sama sempurna tanpa bergantung pada pengiraan titik terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!