Heim > Java > javaLernprogramm > Wie können wir effizient bestimmen, ob eine große Zahl ein perfektes Quadrat ist?

Wie können wir effizient bestimmen, ob eine große Zahl ein perfektes Quadrat ist?

Susan Sarandon
Freigeben: 2024-12-20 01:20:15
Original
990 Leute haben es durchsucht

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

Führen Sie zu Beginn des Programms eine Vorfilterung durch, um den Vorgang zu beschleunigen und offensichtliche nichtquadratische Zahlen herauszufiltern, einschließlich negativer Zahlen und Zahlen, deren letzte 4 Ziffern 0 sind und Zahlen, deren letzte beiden Ziffern bestimmte Anforderungen erfüllen. Die Nummer der Bedingung (5 oder 8 in Dezimalzahl). Stellen Sie sich 0 als Quadratzahl vor.

Als nächstes prüfen Sie mit bitweisen Verfahren, ob der Rest von Modulo 255 = 3 = 3 5 17 eine Quadratzahl ist. Das Array bad255 zeichnet auf, ob jeder Rest eine Quadratzahl ist den Tisch hoch.

Für Zahlen, die den Vorfilter bestehen, dividieren Sie durch alle Potenzen von 2 (in einer binären Suchmethode), bis der Quotient ungerade ist.

Der letzte Schritt besteht darin, die Quadratwurzel mit einer Methode ähnlich dem Hensel-Lemma zu approximieren. Die innere Schleife beginnt mit einem durch das Startarray vorgegebenen Anfangswert, der eine Annäherung an sqrt (mod 8192) liefert. Diese Näherung wird durch aufeinanderfolgende Berechnungen kontinuierlich verbessert, wobei bitweise Tricks zur Verbesserung der Geschwindigkeit eingesetzt werden.

Die grobe Struktur dieser Methode ist wie folgt:

  1. Vorfilter zum Entfernen offensichtlicher nichtquadratischer Zahlen.
  2. Prüfen Sie, ob der Rest modulo 255 eine Quadratzahl ist.
  3. Geteilt durch eine Potenz von 2.
  4. Berechnen Sie Quadratwurzeln näherungsweise mithilfe einer Variante des Hensel-Lemmas.

Es ist erwähnenswert, dass der Autor dieses Algorithmus behauptet, dass er 35 % schneller läuft als andere Methoden.

Das obige ist der detaillierte Inhalt vonWie können wir effizient bestimmen, ob eine große Zahl ein perfektes Quadrat ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage