Я столкнулся с интересной математической задачей, которая потребовала от меня некоторых арифметических действий с числами, состоящими более чем из 281 цифр. Я знаю, что невозможно представить такое большое число в системе, где для каждой цифры есть одна единица памяти, но мне интересно, есть ли какие-нибудь способы обойти это.
Моя первоначальная мысль состояла в том, чтобы использовать чрезвычайно большое основание вместо основания 10 (десятичное). После некоторых размышлений я считаю (но не могу проверить), что оптимальным основанием будет квадратный корень из числа цифр (поэтому для числа с 281 цифрами вы должны использовать основание 240ish), что является улучшением, но плохо масштабируется и по-прежнему непрактично.
Итак, какие варианты у меня есть? Я знаю много библиотек произвольной точности, но есть ли такие, которые поддерживают такую арифметику?
Спасибо о7
РЕДАКТИРОВАТЬ: подумав еще немного, я понимаю, что могу быть совершенно неправ насчет «оптимальной базы будет квадратный корень из числа цифр», но а) поэтому я спрашиваю и б) я слишком устал, чтобы помнить мои первоначальные рассуждения для предположения.
РЕДАКТИРОВАТЬ 2: 1000 000 по основанию десять = F4240 по основанию 16 = 364110 по основанию 8. В основании 16 вам нужно 20 бит для хранения числа в основании 8, вам нужно 21, поэтому может показаться, что, увеличивая базу, вы определяете общее количество необходимое количество битов. (опять же это может быть неправильно)
1111 0100 0010 0100 0000
, а восьмеричное —011 110 100 001 001 000 000
. Последний имеет начальный нуль из-за того, как вы решили сгруппировать эти биты, но начальный ноль не нужно сохранять. - person David Z   schedule 08.02.2012