Biginteger на Objective-C - PullRequest
       8

Biginteger на Objective-C

15 голосов
/ 04 августа 2009

Может ли кто-нибудь предоставить код для реализации BigInteger в target-c, которая предоставляет функцию PowMod?

Ответы [ 5 ]

10 голосов
/ 11 декабря 2009

Надеюсь, еще не поздно ответить на эту тему.

Вы можете попробовать " LibTomMath ", который является открытым и бесплатным (автор отдает этот проект в общественное достояние). Он работает из коробки без какой-либо настройки, просто поместите все bn _ *. C и tommath * .h в ваш проект Xcode, и вы готовы к работе.

#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);
7 голосов
/ 31 июля 2013

Вы можете попробовать https://github.com/kirsteins/JKBigInteger Это похоже на класс Java BigInteger. У него есть мод и методы Pow, которые вы можете комбинировать.

7 голосов
/ 04 августа 2009

Как простая библиотека C, openssl BN должен это делать.

BN_mod_exp() вычисляет a к p-й степени по модулю m (r = a ^ p% m). Эта функция использует меньше времени и пространства, чем BN_exp ().

4 голосов
/ 04 августа 2009

Ближайший встроенный класс в библиотеках Какао - NSDecimalNumber, который обеспечивает арифметику с основанием 10 (и поэтому может обрабатывать только целочисленную арифметику) для диапазона мантиссы x 10 ^ экспоненты, где мантисса равна 38 -битное число с плавающей запятой и экспонента от -128 до 128. Если это охватывает диапазон, который вам нужен, есть методы умножения и мощности. В противном случае, поскольку Objective-C является надмножеством C, любой реализации Bigint на C, которую вы можете найти, будет достаточно.

2 голосов
/ 05 августа 2009

Давным-давно я катал свою собственную обертку вокруг GMP. Я никогда не использовал сторонние библиотеки BigNum ObjC, но у меня были следующие закладки: RSMath , который использует функции OpenSSL bignum, и MPInteger , который использует GMP.

...