biginteger on Objective-c

放肆的年华 提交于 2019-11-26 22:57:41
iwat

I hope it's not too late to answer this thread.

You can try "LibTomMath" which is opensource and free (the author give away this project as public domain). It works out of the box without any configuration, just put all bn_*.c and tommath*.h to your Xcode project and you are ready to go.

#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);

As plain C library, openssl's BN should be able to do it.

BN_mod_exp() computes a to the p-th power modulo m (r=a^p % m). This function uses less time and space than BN_exp().

Kirsteins

You can try https://github.com/kirsteins/JKBigInteger It is similar to Java's BigInteger class. It has mod and pow methods that you can combine.

The closest builtin class in the Cocoa libraries is NSDecimalNumber which provides base-10 arithmetic (and so can handle integer-only arithmetic) for the range mantissa x 10^exponent where mantissa is a 38-bit float and exponent is -128 to 128. If that covers the range you need, there are multiplication and power methods. Otherwise, since Objective-C is a superset of C, any C implementation of bigint that you can find will suffice.

I rolled my own wrapper around GMP once, long ago. I've never used any third party BigNum ObjC librariers before, but I had these bookmarked: RSMath, which uses the OpenSSL bignum functions, and MPInteger, which uses GMP.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!