kann mir jemand folgendes Programm von Java in C++ übersetzten?
-
ich brauch den zuerst genannten java code in c++, da für meine primzahlrechnung die java platform zu langsam ist. mit c++ verspreche ich mir einen gewschwindigkeitsvorteil. (wer sich genauer interresiert, das ist der miller-rabin prime-test)
-
x_dawnbeach schrieb:
ich brauch den zuerst genannten java code in c++, da für meine primzahlrechnung die java platform zu langsam ist. mit c++ verspreche ich mir einen gewschwindigkeitsvorteil. (wer sich genauer interresiert, das ist der miller-rabin prime-test)
1. Wenn Du das Optimum an Performance herausholen willst, musst Du sowieso selbst ran. Das macht keiner für dich, es sei denn, Du zahlst ordentlich. Es ist auch nicht so, dass man automatisch mehr Performance kriegt, wenn man ein Programmstück völlig ohne jede Veränderung von Java nach C++ übersetzt. Unter C++ kann man bestimmte Dinge machen, die man unter Java nicht machen kann: Einige dieser Dinge können (richtig eingesetzt) Performance bringen. Andere Dinge können in beiden Sprachen gemacht werden, haben aber jeweils unterschiedliche Performance- und Speichercharakteristiken. Das ist dann aber auch nicht immer zum Vorteil von C++. Du kriegst die Performance also nicht einfach so, nur weil Du C++ einsetzt. Und entsprechend solltest Du genau wissen, warum und wie Du C++ hier einsetzen möchtest, um gegenüber dem Javaprogramm Performance herauszuholen.
...das weißt Du aber nicht, denn sonst könntest Du den Code locker selbst schreiben. Weißt Du überhaupt, ob der Javacode hier langsam ist? Wenn ja: Weißt Du, ob das speziell an Java liegt bzw. welche Gründe das genau hat?
2. Die Standardbibliothek von C++ kennt keinen Datentyp für große Ganzzahlen. Vielleicht solltest Du also genauer sagen, was Du auf C++-Seite als Äquivalent zu BigInteger nehmen möchtest.
@Gideon: Interessant!
-
der java code ist nicht langsam, aber erkönnte schneller sein. ich könnte das programm auch selber in c+ übersetzen, doch ich weiß nicht wie ich einen großen zahlentyp deklariere(>=10.000.001 stellen) und wie ich mod, div, tobinarystring und 2^ mit funktionen schnell berechnen kann (durch welche bibliotheken oder so). weis jemand ne antwort?
-
Die Datentypen mit dem größten Wertebereich sind __int64 und long long, aber 10 mio liegt im Wertebereich von int!!!
div: / (division)
mod: % (modulo)
potenzieren: pow()int zu string: itoa()
Nun müsstest du problemlos den Code zu C++ übersetzen können :p
-
nicht die zahl 10 mio, sonder 10 mio stellen: z.B. 8765 hat vier stellen. int hat nur 10 stellen oder so, int64 hat die meisten mit 20, ich brauche aber 10mio., dass ist mein problem.
-
x_dawnbeach schrieb:
ich könnte das programm auch selber in c+ übersetzen, doch ich weiß nicht wie ich einen großen zahlentyp deklariere(>=10.000.001 stellen) und wie ich mod, div, tobinarystring und 2^ mit funktionen schnell berechnen kann (durch welche bibliotheken oder so). weis jemand ne antwort?
Frag mal im C++ Forum nach ner Bibliothek für große Zahlen. Da gibt es sicherlich etwas. ...und ich glaube sogar, dass danach relativ häufig gefragt wird. Es sollte sich also lohnen, vorher mal in die FAQ zu gucken.
-
Was macht man mit einer Zahl, die 10mio Stellen hat?
-
(a) aufessen
(b) damit rechnen
-
(a)
-
http://de.wikipedia.org/wiki/Primzahlen#Gr.C3.B6.C3.9Fte_bekannte_Primzahl schrieb:
Der Satz von Euklid besagt, dass es keine größte Primzahl gibt. Es ist jedoch kein Verfahren bekannt, das effizient beliebig große Primzahlen generiert, so dass es stets eine größte bekannte Primzahl gab, seitdem sich die Menschen mit Primzahlen befassen. Derzeit ist es 230.402.457 − 1, eine Zahl mit 9.152.052 (dezimalen) Stellen, gefunden am 15. Dezember 2005 von einem Professorenteam der Central Missouri State University im Rahmen des George Woltmans GIMPS-Projekts (Great Internet Mersenne Prime Search) zur Suche von Mersenne-Primzahlen. Für den ersten Primzahlbeweis einer Zahl mit mehr als 10 Millionen Dezimalstellen hat die Electronic Frontier Foundation einen Preis von 100.000 US-Dollar ausgeschrieben.
Du willst wohl nicht etwa versuchen ein paar Euros nebenbei zu verdienen? Die Sache mit der Zahl mit den 10 Mio Stellen hört sich verdammt danach an ...