Java: Erhalten Sie den größten gemeinsamen Teiler
Habe ich gesehen, dass eine solche Funktion existiert für BigInteger
d.h. BigInteger#gcd
. Gibt es andere Funktionen in Java, welche die arbeiten auch für andere Arten (int
long
oder Integer
)? Es scheint, dass das Sinn machen würde als java.lang.Math.gcd
(mit allen Arten von überlastungen), aber es ist nicht da. Ist es irgendwo anders?
(Verwechseln Sie diese Frage mit "wie implementiere ich das selbst", bitte!)
InformationsquelleAutor der Frage Albert | 2010-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für int und long, die als primitive, nicht wirklich. Für Integer, ist es möglich, jemand schrieb.
Gegeben, BigInteger ist eine (mathematische/funktionale) Obermenge von int, Integer, long, und Lange, wenn Sie brauchen, um diese Typen verwenden, konvertieren Sie in ein BigInteger, tun den GCD, und konvertieren das Ergebnis zurück.
Der bessere Weg:
InformationsquelleAutor der Antwort Tony Ennis
Soweit ich weiß, gibt es keine integrierte Methode für primitive. Aber etwas so einfaches wie das sollte den trick tun:
Können Sie auch eine Zeile, wenn man in diese Art der Sache:
Es sollte angemerkt werden, dass es absolut keine Unterschied zwischen den beiden, wie Sie kompilieren, um die gleiche byte-code.
InformationsquelleAutor der Antwort Matt
Oder der euklidische Algorithmus zur Berechnung der GCD...
InformationsquelleAutor der Antwort Xorlev
Jakarta-Commons-Math hat genau das.
ArithmeticUtils.gcd(int p, int q)
InformationsquelleAutor der Antwort Tom Tucker
Verwenden Guave
LongMath.gcd()
undIntMath.gcd()
InformationsquelleAutor der Antwort Morad
Können Sie diese Implementierung der Binären GCD-Algorithmus
}
Vom http://introcs.cs.princeton.edu/java/23recursion/BinaryGCD.java.html
InformationsquelleAutor der Antwort linuxjava
Einige Implementierungen, die hier nicht ordnungsgemäß funktioniert, wenn beide zahlen negativ sind. gcd(-12, -18) ist 6, nicht -6.
Also absoluter Wert zurückgegeben werden soll, so etwas wie
InformationsquelleAutor der Antwort Robot Monk
Es sei denn, ich habe Guave, definiere ich so:
InformationsquelleAutor der Antwort Alexey
Wenn Sie Java 1.5 oder höher, dann ist dies ein iterativer binären GCD-Algorithmus, die verwendet
Integer.numberOfTrailingZeros()
zur Verringerung der Zahl der Prüfungen und der Iterationen benötigt.Unit-test:
InformationsquelleAutor der Antwort MT0
können wir verwenden rekursive Funktion zum finden gcd
InformationsquelleAutor der Antwort Esann
InformationsquelleAutor der Antwort Gitau Harrison
Ich habe folgende Methode.
InformationsquelleAutor der Antwort Isuru
InformationsquelleAutor der Antwort george ghawali
InformationsquelleAutor der Antwort Oliver Queen
Benutzte ich diese Methode, die ich erstellt, als ich 14 Jahre alt war.
InformationsquelleAutor der Antwort John Doe
Diese Methode verwendet die Euklid ' s Algorithmus, um die "Größten Gemeinsamen Teiler" zweier zahlen. Es erhält zwei Ganzzahlen und gibt den gcd von Ihnen. so einfach!
InformationsquelleAutor der Antwort Mohsen
Apache! - es hat sowohl gcd und lcm, so cool!
Jedoch aufgrund der Tiefe Ihrer Umsetzung, es ist langsamer im Vergleich zu einfachen handgeschriebenen version (falls es darauf ankommt).
InformationsquelleAutor der Antwort Boleslovas Švitrigaila
InformationsquelleAutor der Antwort malik arman
% Uns geben wird, die gcd Zwischen zwei zahlen bedeutet das:-
% oder mod von big_number/small_number sind =gcd,
und wir schreiben es auf java wie diese
big_number % small_number
.EX1: für zwei ganze zahlen
EX2: für drei Ganzzahlen, die
InformationsquelleAutor der Antwort Mr-Al7lawe
InformationsquelleAutor der Antwort user2003749