How to resolve the algorithm Fractran step by step in the PARI/GP programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Fractran step by step in the PARI/GP programming language

Table of Contents

Problem Statement

FRACTRAN is a Turing-complete esoteric programming language invented by the mathematician John Horton Conway. A FRACTRAN program is an ordered list of positive fractions

P

(

f

1

,

f

2

, … ,

f

m

)

{\displaystyle P=(f_{1},f_{2},\ldots ,f_{m})}

, together with an initial positive integer input

n

{\displaystyle n}

.

The program is run by updating the integer

n

{\displaystyle n}

as follows:

Conway gave a program for primes in FRACTRAN: Starting with

n

2

{\displaystyle n=2}

, this FRACTRAN program will change

n

{\displaystyle n}

to

15

2 × ( 15

/

2 )

{\displaystyle 15=2\times (15/2)}

, then

825

15 × ( 55

/

1 )

{\displaystyle 825=15\times (55/1)}

, generating the following sequence of integers: After 2, this sequence contains the following powers of 2: which are the prime powers of 2.

Write a program that reads a list of fractions in a natural format from the keyboard or from a string, to parse it into a sequence of fractions (i.e. two integers), and runs the FRACTRAN starting from a provided integer, writing the result at each step.
It is also required that the number of steps is limited (by a parameter easy to find).

Use this program to derive the first 20 or so prime numbers.

For more on how to program FRACTRAN as a universal programming language, see:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Fractran step by step in the PARI/GP programming language

Source code in the pari/gp programming language

\\ FRACTRAN 
\\ 4/27/16 aev
fractran(val,ft,lim)={
my(ftn=#ft,fti,di,L=List(),j=0);
while(val&&j
  for(i=1,ftn, fti=ft[i]; di=denominator(fti);
      if(val%di==0, break));\\fend i
  val= numerator(fti)*val/di; j++);\\wend j
return(Vec(L));
}

{\\ Executing:
my(v=[17/91,78/85,19/51,23/38,29/33,77/29,95/23,77/19,1/17,11/13,13/11,15/14,15/2,55/1]);
print(fractran(2,v,15));
}

  

You may also check:How to resolve the algorithm Periodic table step by step in the FutureBasic programming language
You may also check:How to resolve the algorithm Function composition step by step in the Mathcad programming language
You may also check:How to resolve the algorithm Short-circuit evaluation step by step in the Swift programming language
You may also check:How to resolve the algorithm Hailstone sequence step by step in the J programming language
You may also check:How to resolve the algorithm Mutual recursion step by step in the BCPL programming language