Bagaimanakah Kita Boleh Menentukan dengan Cekap sama ada Nombor ialah Segiempat Sempurna Menggunakan Integer?

Mary-Kate Olsen
Lepaskan: 2024-11-09 10:17:02
asal
341 orang telah melayarinya

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

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
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

Output:

152415789666209426002111556165263283035677489 True
152415789666209426002111556165263283035677490 False
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan