Кто-нибудь может предоставить код для реализации BigInteger
в Objective-C, который предоставляет функцию PowMod?
biginteger на Objective-c
Ответы (5)
Надеюсь, еще не поздно ответить в этой теме.
Вы можете попробовать "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);
mp_expt_d
.
- person dchest; 23.11.2016
Как простая библиотека C, BN openssl должен уметь это делать.
BN_mod_exp()
вычисляет a в p-й степени по модулю m (r=a^p% m). Эта функция использует меньше времени и места, чем BN_exp().
Вы можете попробовать https://github.com/kirsteins/JKBigInteger. Это похоже на BigInteger
. У него есть методы mod и pow, которые вы можете комбинировать.
Ближайший встроенный класс в библиотеках Cocoa — NSDecimalNumber
, который обеспечивает арифметику с основанием 10 (и поэтому может обрабатывать только арифметические операции с целыми числами) для диапазона мантисса x 10^экспонента, где мантисса — это 38-битное число с плавающей запятой, а экспонента — от -128 до 128. Если это покрывает диапазон, который вы нужно, есть методы умножения и мощности. В противном случае, поскольку Objective-C является надмножеством C, подойдет любая реализация bigint на языке C, которую вы сможете найти.
NSDecimalNumber
использует систему счисления с основанием 10 для кодирования и манипулирования числами, а не (намного) более распространенную систему счисления с основанием 2. Система счисления с основанием 10 обычно используется всякий раз, когда речь идет о валюте. На самом деле, в зависимости от вашей юрисдикции, обработка чисел, связанных с валютой, в системах счисления, отличных от 10, может быть незаконной.
- person johne; 05.08.2009