FRACTRAN
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
FRACTRAN은 정수의 소인수 지수를 레지스터 값으로 사용하는 계산 모델이다. 양의 분수 목록으로 구성된 FRACTRAN 프로그램은 각 분수를 입력 정수에 곱하여 정수를 생성하는 과정을 반복하며, 분수의 분모는 조건을, 분자는 연산을 나타낸다. FRACTRAN은 덧셈, 뺄셈, 곱셈과 같은 기본적인 연산을 포함하여 피보나치 수열 생성, 소수 생성 등 다양한 계산을 수행할 수 있으며, 특히 존 콘웨이가 제시한 소수 생성 프로그램이 유명하다.
더 읽어볼만한 페이지
- 난해한 프로그래밍 언어 - HQ9+
HQ9+는 간단한 인터프리터 구현이 가능한 난해한 프로그래밍 언어로, 'Hello, world!' 출력, 소스 코드 출력, "99 Bottles of Beer" 가사 출력, 누산기 값 증가의 네 가지 명령을 제공한다. - 난해한 프로그래밍 언어 - JSFuck
JSFuck은 제한된 문자만을 사용하여 JavaScript 코드를 표현하는 난해한 프로그래밍 스타일로, 웹 보안 공격에 악용될 수 있으며, 기본값 조합과 `Function` 생성자를 활용하여 코드를 실행하고 난독화하여 악성 코드 탐지를 어렵게 만든다. - 계산 모형 - 양자 컴퓨터
양자 컴퓨터는 양자역학적 현상을 이용하여 정보를 처리하는 컴퓨터로, 큐비트를 통해 0과 1을 동시에 표현하여 특정 연산에서 기존 컴퓨터보다 빠른 속도를 보이며 암호 해독, 신약 개발 등 다양한 분야에 혁신을 가져올 것으로 기대된다. - 계산 모형 - 양자 회로
양자 회로는 양자 컴퓨팅에서 양자 논리 게이트들을 연결한 회로로, 큐비트의 양자역학적 특성을 활용하여 계산을 수행하며 양자 계산의 핵심 요소로서 연구가 활발히 진행되고 있다.
| FRACTRAN |
|---|
2. FRACTRAN 프로그램의 이해
FRACTRAN 프로그램은 괴델 넘버링을 사용해 입력값과 출력값을 하나의 소인수분해로 표현한다. 예를 들어 a=2, b=1, c=1 을 입력하면 와 같은 형태로 표현한다. FRACTRAN 프로그램은 인자 의 소수 지수에 레지스터가 저장되는 일종의 레지스터 머신이며, 괴델 수를 사용하여 양의 정수 ''n''은 임의의 수와 크기의 양의 정수 변수를 부호화할 수 있다.
2. 1. 작동 원리
FRACTRAN 프로그램은 입력된 정수의 소인수 지수를 레지스터 값으로 사용하는 일종의 레지스터 머신으로 볼 수 있다.[1] 괴델 넘버링을 사용하면 양의 정수 ''n''은 여러 개의 양의 정수 변수를 인코딩할 수 있다. 각 변수의 값은 정수의 소인수 분해에서 소수의 지수로 표현된다. 예를 들어,:60 = 22 × 31 × 51
위의 수는 변수가 2, 과 변수가 1의 값을 가지며, 다른 모든 변수는 0의 값을 갖는 레지스터 상태를 나타낸다.
FRACTRAN 프로그램은 양의 분수들의 정렬된 목록이다. 각 분수는 분모의 소인수로 표현되는 하나 이상의 변수에 대한 테스트를 나타낸다. 예를 들어:
: = 21/20 = (3 × 7) / (22 × 51)
위의 식은 와 를 테스트한다. 만약 ≥ 2이고 ≥ 1이면, 에서 2를 빼고, 에서 1을 빼고, 에 1을 더하고, 에 1을 더한다. 예를 들어:
:60 ⋅ = 22 × 31 × 51 ⋅ (3 × 7) / (22 × 51) = 32 × 71
FRACTRAN 프로그램은 분수 목록이므로, 이러한 테스트-감소-증가 명령은 FRACTRAN 언어에서 허용되는 유일한 명령이다. 또한 다음 제한 사항이 적용된다.
- 각 명령이 실행될 때마다 테스트되는 변수도 감소한다.
- 동일한 변수는 단일 명령에서 감소와 증가를 동시에 할 수 없다(그렇지 않으면 해당 명령을 나타내는 분수가 기약 분수가 아닐 것이다). 따라서 각 FRACTRAN 명령은 변수를 테스트하면서 소비한다.
- FRACTRAN 명령은 변수가 0인지 직접 테스트하는 것은 불가능하다(그러나 특정 변수를 테스트하는 다른 명령 다음에 배치되는 기본 명령을 생성하여 간접 테스트를 구현할 수 있다.).[7]
2. 2. 제약 조건
FRACTRAN 프로그램은 양의 분수 목록으로 구성되므로, 테스트-감소-증가 명령만이 유일하게 허용되는 명령이다. 또한 다음과 같은 제약 조건이 따른다.[1]- 각 명령이 실행될 때마다 테스트되는 변수도 감소한다.
- 동일한 변수는 단일 명령에서 감소되면서 동시에 증가될 수 없다. 이는 해당 명령을 나타내는 분수가 기약 분수가 아니기 때문이다. 따라서 각 FRACTRAN 명령은 변수를 테스트함과 동시에 소비한다.
- FRACTRAN 명령은 변수가 0인지 직접적으로 테스트하는 것은 불가능하다. 그러나 특정 변수를 테스트하는 다른 명령 뒤에 기본 명령을 배치하여 간접적으로 테스트를 구현할 수 있다.
3. FRACTRAN 프로그래밍 예제
FRACTRAN은 기본적인 사칙연산을 수행할 수 있도록 프로그래밍될 수 있다. 예를 들어 덧셈, 뺄셈, 곱셈 등이 가능하다.
최댓값 구하기 프로그램a와 b를 입력하면 a와 b 중 더 큰 값을 출력하는 프로그램은 다음과 같다.
:
소수 생성 프로그램다음은 존 콘웨이가 제시한 소수 생성 프로그램이다.
:
n=2를 입력하면, 이 프로그램은 다음과 같은 수열을 생성한다.
:2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, ...
이 수열은 2의 소수 거듭제곱을 포함한다.
:
피보나치 수열 프로그램피보나치 수열을 생성하는 프로그램은 다음과 같다.
:
