Kann jemand Code für eine BigInteger
Implementierung in objective-c, die eine PowMod-Funktion bietet bereitstellen?biginteger auf Objective-c
Antwort
Die nächstgelegene eingebaute Klasse in den Cocoa-Bibliotheken ist NSDecimalNumber
, die arithmetische Basis-10 (und damit arithmetische Ganzzahlverarbeitung) für den Bereich Mantisse x 10^Exponent, wobei Mantisse ein 38-Bit-Gleitkomma und Exponent ist - 128 bis 128. Wenn das den Bereich deckt, den Sie benötigen, gibt es Multiplikations- und Power-Methoden. Andernfalls, da Objective-C eine Obermenge von C ist, wird jede C-Implementierung von bigint, die Sie finden können, ausreichen.
Als einfache C-Bibliothek sollte openssls BN es tun können.
BN_mod_exp()
berechnet a zum p-ten Potenzmodulo m (r = a^p% m). Diese Funktion benötigt weniger Zeit und Speicherplatz als BN_exp().
Ich hoffe, es ist nicht zu spät diesen Thread zu beantworten.
Sie können "LibTomMath" versuchen, die opensource und frei ist (der Autor verschenkt dieses Projekt als public domain). Es funktioniert ohne jede Konfiguration, einfach alle bn _ *. C und tommath * .h zu Ihrem Xcode-Projekt und Sie sind bereit zu gehen.
#import "tommath.h"
mp_int number1, number2, number3;
mp_init(&number1);
mp_init(&number2);
mp_init(&number3);
mp_read_radix(&number1, "0a120edfff558c98a73015d5d67e8990", 16);
mp_read_radix(&number2, "12e6f45d698c7b7009a841c1348d6ff4", 16);
mp_mul(&number1, &number2, &number3);
char output[1000];
mp_toradix(&number3, output, 16);
NSLog(@"number3:%s", output);
mp_div(&number3, &number1, &number2, NULL);
mp_toradix(&number2, output, 16);
NSLog(@"number2:%s", output);
Sie können https://github.com/kirsteins/JKBigInteger versuchen Es ist ähnlich wie Java BigInteger
Klasse. Es hat Mod und Pow-Methoden, die Sie kombinieren können.
Funktioniert perfekt! Große Third-Part-Bibliothek! –
gute Bibliothek, ich denke, das ist die beste Antwort –
Es scheint, dass intern "LibTomMath" verwendet wird (siehe iwats Antwort). – LaborEtArs
Dies ist fast sicher nicht das, wonach der Autor sucht. 'NSDecimalNumber' verwendet ein Basis-10-Nummerierungssystem zum Codieren und Manipulieren von Zahlen, nicht die (viel) häufigere Basis-2. Ein Basis-10-Nummernsystem wird typischerweise verwendet, wenn Währung involviert ist. In der Tat kann es gesetzwidrig sein, währungsbezogene Nummern in einem Nicht-Basis-10-Nummerierungssystem zu verarbeiten. – johne