The fully working example finds all primes (theoretically). In real life the FA is constrained by stack size. The theoretical run is important, because it proves that all primes have a deterministic distribution. See videos on https://www.youtube.com/watch?v=I0w78ewvum4 https://youtu.be/2W1oi7g1rdE
The code can be also found on github. https://github.com/cerebrummi/fractalalgorithm
It implements SFA with FA from my paper: https://zenodo.org/records/16829092
package common;
public class StartFA
{
public static void main(String[] args)
{
SFA sfa = new SFA();
for( int i = 0 ; i < 8; i++)
{
sfa.step();
}
}
}
AND
package common;
import fa.walksets.APn;
import fa.walksets.An;
import fa.walksets.BPn;
import fa.walksets.Bn;
import fa.walksets.CPn;
import fa.walksets.Cn;
public class SFA
{
// production line one
An walksetAn = new An();
Bn walksetBn = new Bn();
Cn walksetCn = new Cn();
// production line two
APn walksetAPn = new APn();
BPn walksetBPn = new BPn();
CPn walksetCPn = new CPn();
public SFA()
{
// starting state
checkStartingState();
printWalksets();
}
public void step()
{
System.out.println("========== step start ==========");
// update walkset An
if(walksetBn.getN()!= null)
{
walksetAn.addElement(walksetBn.cutN());
}
// update walkset Bn
walksetBn.setN(walksetCn.cutLeftmostElement());
// update walkset Cn
// has already taken place during update Bn
// update walkset APn
if(walksetBPn.getN()!= null)
{
walksetAPn.addElement(walksetBPn.cutN());
}
// update walksetBPn
walksetBPn.setN(walksetCPn.getLeftmostElement());
// find wether n in Bn is prime
if(walksetBn.getN() == 1)
{
walksetBPn.setN("1");
}
else
{
if(walksetBPn.getN().equals("L"))
{
walksetBPn.setN("P");
}
}
// update walksetCPn
walksetCPn.move();
if(walksetBPn.getN().equals("P"))
{
walksetCPn.copy(walksetBn.getN());
walksetCPn.change(walksetBn.getN());
}
printWalksets();
System.out.println("========== step end ===========");
}
private void printWalksets()
{
walksetAn.print();
walksetAPn.print();
walksetBn.print();
walksetBPn.print();
walksetCn.print();
walksetCPn.print();
}
private boolean checkStartingState()
{
if(!walksetAn.getList().isEmpty())
{
System.out.println("Error in starting state of An");
return false;
}
if(walksetBn.cutN()!= null)
{
System.out.println("Error in starting state of Bn");
return false;
}
if(walksetCn.getLeftmostElement() != 1)
{
System.out.println("Error in starting state of Cn");
return false;
}
if(!walksetAPn.getList().isEmpty())
{
System.out.println("Error in starting state of APn");
return false;
}
if(walksetBPn.getN()!= null)
{
System.out.println("Error in starting state of BPn");
return false;
}
if(!walksetCPn.getLeftmostElement().equals("L"))
{
System.out.println("Error in starting state of CPn");
return false;
}
return true;
}
}
AND
package fa.walksets;
public interface walkset
{
public void print();
}
AND
package fa.walksets;
import java.util.ArrayList;
import java.util.StringJoiner;
public class An implements walkset
{
ArrayList<Integer> list = new ArrayList<>();
public void addElement(int n)
{
list.add(n);
}
public ArrayList<Integer> getList()
{
return list;
}
@Override
public void print()
{
String start = "An < ";
StringJoiner joiner = new StringJoiner(",");
for (int element : list)
{
joiner.add(String.valueOf(element));
}
String end = " >";
System.out.println(start + joiner.toString() + end);
}
}
AND
package fa.walksets;
import java.util.ArrayList;
import java.util.StringJoiner;
public class APn implements walkset
{
ArrayList<String> list = new ArrayList<>();
public void addElement(String n)
{
list.add(n);
}
public ArrayList<String> getList()
{
return list;
}
@Override
public void print()
{
String start = "APn < ";
StringJoiner joiner = new StringJoiner(",");
for (String element : list)
{
joiner.add(String.valueOf(element));
}
String end = " >";
System.out.println(start + joiner.toString() + end);
}
}
AND
package fa.walksets;
public class Bn implements walkset
{
Integer n;
public Integer cutN()
{
Integer copyOfN = n;
n = null;
return copyOfN;
}
public Integer getN()
{
return n;
}
public void setN(int n)
{
this.n = n;
}
@Override
public void print()
{
System.out.println("Bn = < " + n + " >");
}
}
AND
package fa.walksets;
public class BPn implements walkset
{
String n;
public String getN()
{
return n;
}
public void setN(String n)
{
this.n = n;
}
public String cutN()
{
String copyOfN = n;
n = null;
return copyOfN;
}
@Override
public void print()
{
System.out.println("BPn = < " + n + " >");
}
}
AND
package fa.walksets;
public class Cn implements walkset
{
int leftmostElement = 1;
public int cutLeftmostElement()
{
return leftmostElement++;
}
public int getLeftmostElement()
{
return leftmostElement;
}
@Override
public void print()
{
System.out.println("Cn = < " + leftmostElement + ", ... infinity >");
}
}
AND
package fa.walksets;
import java.util.Arrays;
import java.util.LinkedList;
public class CPn implements walkset
{
LinkedList<String> list = new LinkedList<>();
public CPn()
{
list.add("L");
}
public void move()
{
String element = list.pollFirst();
list.add(element);
}
public void copy(int n)
{
LinkedList<String> copiedList = new LinkedList<>();
for(int i = 0; i < n; i++)
{
for(String element : list)
{
copiedList.add(element);
}
}
list = copiedList;
}
public void change(int n)
{
LinkedList<String> copy = new LinkedList<>();
for(String element: list)
{
copy.add(element);
}
int index = 1;
for(int i = 0; i < copy.size(); i++)
{
if(index%n==0 && list.get(i).equals("L"))
{
list.set(i, "M");
}
index++;
}
}
public String getLeftmostElement()
{
return list.getFirst();
}
@Override
public void print()
{
System.out.println("CPn = < " + Arrays.toString(list.toArray()) + " >");
}
}