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?

Adakah terdapat cara yang mudah untuk menentukan sama ada nombor adalah segi empat sama sempurna tanpa bergantung pada pengiraan titik terapung?

Linda Hamilton
Linda Hamiltonasal
2024-11-09 01:47:02656semak imbas

Is there a foolproof way to determine if a number is a perfect square without relying on floating-point computations?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn