FRACTRAN

Описание

Программа на FRACTRAN записывается как упорядоченный список положительных дробей вместе с начальным положительным целочисленным входом n. Программа запускается путём обновления целого числа n следующим образом:

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

Например следующая программа генерирует простые числа:

Начиная с n = 2, эта программа генерирует следующую последовательность целых чисел:

2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, ... последовательность A007542 в OEIS

После 2 эта последовательность содержит следующие степени 2:

последовательность A034785 в OEIS

которые являются простыми степенями 2.

Понимание программы FRACTRAN

Программа FRACTRAN может рассматриваться как тип машины Минского, где регистры хранятся в простых показателях в аргументе n.

Используя нумерацию Гёделя, положительное целое число n может кодировать произвольное число произвольно больших положительных целочисленных переменных. Значение каждой переменной кодируется как показатель простого числа в простой факторизации целого числа. Например, целое число

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

Программа FRACTRAN — это упорядоченный список положительных дробей. Каждая дробь представляет собой инструкцию, которая проверяет одну или несколько переменных, представленных основными факторами её знаменателя. Например:

проверяет две переменные и . Если и , то выполняются присвоения , , , . Например:

Поскольку программа FRACTRAN представляет собой просто список дробей, эти инструкции проверка-присвоение являются единственными допустимыми инструкциями на языке FRACTRAN. Кроме того, применяются следующие ограничения:

  • Каждый раз, когда выполняется инструкция, проверяемые переменные также уменьшаются.
  • Одна и та же переменная не может быть одновременно уменьшена и увеличена в одной инструкции (в противном случае дробь, представляющая эту инструкцию, не будет несократимой).
  • Инструкция FRACTRAN неспособна непосредственно проверить, равна ли переменная 0. Однако есть непрямой способ это сделать путём создания инструкции, которая помещается после других инструкций, которые проверяют конкретную переменную.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.