LINUX.ORG.RU

Система счисления через вектор степеней простых чисел

 ,


0

1

Я тут такую систему счисления придумал, что числа в ней записываются как вектор из степеней простых чисел. Например число 4 будет записано в ней как {2, 0, 0, 0 ...} т.е. как 2^2 * 3^0 * 5^0 * 7^0. Число 6 как {1, 1, 0, 0 ...} т.е. как 2^1 * 3^1 ...

Так вот, наверняка я не первый, кто такое придумал. Как такая система счисления называется и где ее можно использовать? Из очевидных премуществ я вижу то, что умножение, деление в такой системе счисления реализуется через сложение или вычитание двух векторов, а возведение в степень и извлечение корня реализуется как умножение или деление вектора на соответствующее число.

Только вот я не вижу простых путей делать сложение и вычитание чисел в такой системе счисления. Есть ли они?

★★★★★

Ответ на: комментарий от ziemin

А никак. Разве что влепить специальный битик, который будет обозначать что это ноль.

SZT ★★★★★
() автор топика
Ответ на: комментарий от ziemin

Можно вести счет от нуля с соглашением, что 0^0 = 1. Но костыль, да

algamest
()

Только вот простые числа растут медленней чем степени чего-то, поэтому у тебя уже 977 будет занимать дофига памяти.

Xenius ★★★★★
()
Ответ на: комментарий от aedeph_

Я знаю что такое факторизация. Только тут уже не совсем факторизация получается. В этой системе счисления можно представлять в том числе дробные числа 1/2 = {-1 0 0 0}, и всякие там неизвлекаемые корни, например sqrt(2) = {1/2 0 0 0}(для этого надо чтобы вектор мог хранить в себе рациональные числа)

SZT ★★★★★
() автор топика
Ответ на: комментарий от ziemin

Если ты не заметил, я предлагаю в качестве степеней простых чисел использовать в т.ч. отрицательные и дробные числа. Там речь идет только о натуральных степенях простых чисел

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

Теряется единственность. Будут 2 вектора, (0,1,...) и (log(3),0,...) определять одно и то же число. Ладно, R+ смоделируешь. Отрицательные числа по аналогичной причине нельзя (показательная функция для отрицательных чисел на R не определена). Придется залазить в C

algamest
()

это из серии алгоритма Эвклида - всякое число можно представить в виде комбинации произведения степеней простых чисел ...

anonymous
()
Ответ на: комментарий от ziemin

В теореме, ссылку на которую ты дал, говорится о том, что таким способом можно представить только натуральные числа. Моим способом можно представлять еще рациональные (если допускать отрицательные в векторе) и всякие неизвлекаемые корни (если допускать дроби в векторе)

SZT ★★★★★
() автор топика

лучше придумать как несколькими числами записать произвольный ряд чисел ;)

anonymous
()

Как выше заметили, это работает не для всех действительных чисел, не уверен насчёт всех алгебраических.

И, главное, одно число можно определить бесконечным количеством способов.

Потом, ты определил только для действительных чисел. Кури факториальные кольца.

Да, ты «придумал» факторизацию.

tyakos ★★★
()
Ответ на: комментарий от algamest

Насчет засовывания логарифмов в степени я как-то не думал. Представление рациональных чисел и неизвлекаемых корней получается вполне однозначным, если допускать в векторе степеней рациональные числа. Все множество иррациональных чисел так не представить, это очевидно

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

В итоге, разрешив все вопросы с однозначностью, вернешься к представлением N, что и есть вышеупомянутая теорема арифметики :)

algamest
()
Ответ на: комментарий от algamest

Вышеупомянутая теорема арифметики позволяет представлять через себя только натуральные числа.

Я вообще хотел не обсуждение того, какие числа тут представимы или не представимы, а где подобная система счисления может эффективно использоваться и как в ней эффективно реализовать сложение и вычитание?

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

Сложения не будет - это группа по умножению исключительно. Ну а применение (с определенным извращением) - все, что завязано на факторизацию и простые числа, в т.ч. криптография.

algamest
()
Ответ на: комментарий от algamest

Векторное пространство

Кстати, вместе с операцией сложения векторов (умножения представимых чисел) и существ. 0-вектора (единица) - вполне линейное пространство выходит.

algamest
()
Ответ на: Векторное пространство от algamest

Векторное пространство

Обратные элементы - 1/a, т.е. рациональные дроби. Теперь допускаю дроби, был неправ.

algamest
()
Ответ на: комментарий от SZT

Я вообще хотел не обсуждение того, какие числа тут представимы или не представимы, а где подобная система счисления может эффективно использоваться и как в ней эффективно реализовать сложение и вычитание?

Ты поставил тег «математика».

А про эффективность, нету быстрого алгоритма разложения числа на простые множители, ЕМНИП. Ну и всё.

tyakos ★★★
()
Ответ на: комментарий от tyakos

Думаю, тут может помочь какая-нибудь таблица поиска. А учитывая периодичность(самоподобность) этой таблицы поиска, можно придумать какой-нибудь эффективный метод ее сжатия и распаковки в рантайме

SZT ★★★★★
() автор топика
Ответ на: комментарий от algamest

Я тут примерно прикинул в голове. Некоторые свойства числа можно определить. В частности, если мы складываем или вычитаем два числа и у них есть общие простые делители, то результат тоже будет иметь те общие простые делители. Если одно из чисел имеет какой-то простой делитель, другое не имеет, то получившееся число точно не будет иметь такой простой делитель. Если ни одно из чисел не имеет некоторого простого делителя, то получившееся число может иметь а может не иметь этот простой делитель. Это я без всяких доказательств, в голове прикинул. Доказывается вроде как достаточно просто, учитывая что числа, делящиеся на N повторяются на числовой прямой с периодом N, и при сложении или вычитании получившееся число может вписываться или не вписываться в этот период

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

Это уже кольцо вычетов будет (по модулю простого числа). А там и умножение, и вычитание/сложение. И группы Галуа (нек. расширение понятия кольца вычетов). Правда, там подобному векторному представлению числа не место. Мог накосячить, 2 часа ночи)

algamest
()
Ответ на: комментарий от SZT

Это также будет включать переход в другую систему исчисления.

Ещё, про память. Любое простое число будет иметь вектор длинною с себя. Это плохо. Нет, не вижу преимуществ у такой системы.

tyakos ★★★
()
Ответ на: комментарий от SZT

нужно исходить из того, что само по себе число в виде натурального ряда 1 + N создает на каждом шаге потрясающие сущности, дающие намного больший суммарный эффект чем просто увеличение на единицу

anonymous
()
Ответ на: комментарий от tyakos

Нет, в коде достаточно разреженного массива (выше ссылка была).

algamest
()
Ответ на: комментарий от tyakos

Причем тут другая система счисления? Узнать общие простые делители как раз можно в этой системе счисления

Насчет памяти я выше уже упоминал про https://ru.wikipedia.org/wiki/Разрежённый_массив

SZT ★★★★★
() автор топика
Ответ на: комментарий от SZT

Общие можно легко, прибавить остальные - нет.

algamest Про массив, не важно. Будет занимать минимум столько же памяти, сколько и в десятичной, для простых.

tyakos ★★★
()

это называется факторизацией, а используется, к примеру, для длинной арифметики, в которой нет сложений-вычитаний и больших простых чисел.

f1u77y ★★★★
()
Ответ на: комментарий от anonymous

Держите наркомана.

Не знаю в мой адрес, либо еще в чей, достопочтенный сударь данное высказывание, но скажу так, на всякий пожарный, это не система счисления, данное утверждение некорректно.

andregin
()
Ответ на: комментарий от SZT

В твоей системе {10} = 2^10 - по какой системе счисления записано число 10?

Любое, скажем, вещественное число можно представить в виде произведения простых чисел в (пусть будет) рациональной степени. Уже похоже на формулу. Осталось причесать и доказать.

По ссылке модульная арифметика, и википедия врет.

andregin
()
Ответ на: комментарий от SZT

системой счисления твое представление может называться в случае, если 2^10 = {2}{1,0,1}} будешь использовать только простые числа для представления всего множества чисел, при этом, для каждого простого числа нужен свой уникальный символ.

andregin
()

Только вот я не вижу простых путей делать сложение и вычитание чисел в такой системе счисления

sqrt(3) - sqrt(2) ты вообще так не запишешь

MyTrooName ★★★★★
()
Ответ на: комментарий от aedeph_

А запиши это в десятичной системе.

0.31783724519578205

теперь ты запиши в виде произведения степеней простых. ну, хотя бы с такой же точностью

MyTrooName ★★★★★
()
Ответ на: комментарий от andregin

В твоей системе {10} = 2^10 - по какой системе счисления записано число 10?

В моей системе счисления 10 это 2^1 * 5^1 т.е. {1,0,1,...}

Любое, скажем, вещественное число можно представить в виде произведения простых чисел в (пусть будет) рациональной степени.

Нет. Только некоторое подмножество чисел можно так представить. Такое представление позволяет например умножить sqrt(2) на sqrt(5) без каких-либо проблем с потерей точности. С обычной позиционной системой счисления такое перемножение привело бы к потере точности т.к. числа sqrt(2) и sqrt(5) там точно не представимы. Можно конечно извратиться и сделать систему символьных вычислений, которая бы хранила информацию что там квадратный кореть надо извлекать, но это уже точно не будет являться системой счисления.

SZT ★★★★★
() автор топика
Ответ на: комментарий от MyTrooName

То есть \sqrt3 - sqrt2 - это рациональная дробь.

Окей.

aedeph_ ★★
()
Ответ на: комментарий от MyTrooName

Перевернуть, факторизовать, записать вектор и все знаки поменять. Но еще раз, это группа только по умножению, сложения нету и не будет в ней

algamest
()
Ответ на: комментарий от MyTrooName

Да запросто

(%i5) solve(sqrt(3)-sqrt(2)=2^x,x);
                              log(sqrt(3) - sqrt(2))
(%o5)                    [x = ----------------------]
                                      log(2)
(%i6) float(%);
(%o6)                      [x = - 1.65363990062636]
(%i7) fullratsimp(%);

rat: replaced -1.65363990062636 by -74524725/45067082 = -1.65363990062635
                                      74524725
(%o7)                          [x = - --------]
                                      45067082

SZT ★★★★★
() автор топика
Последнее исправление: SZT (всего исправлений: 1)

Эта штука, вообще говоря, не является системой счисления, потому что в ней нет единственности для не натуральных чисел (для натуральных однозначность факторизации гарантируется основной теоремой арифметики). Складывать или вычитать числа, записанные таким образом, у тебя в принципе не получится.

Hasek ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.