public class Farey { public static void main(String[] args){ Farey mine=new Farey(); int input =1300;//must be greater than 0 //if (input==1) System.out.print("0/1"); //if (input==2) System.out.print("0/1, 1/2"); Fraction ans; ans = mine.new Fraction(0,1); if ( input>1){ mine.makeNew(ans, mine.new Fraction (1,2)); ans.putInAns(); ans.getFrontFrac().getFrontFrac().putInAns(); } if (input>2){ int currNs=3; while (currNs<=input){ Fraction currFrac=ans; while (currFrac.getFrontFrac()!=null){ currFrac=currFrac.getFrontFrac(); if (!currFrac.ans() && currFrac.getDen()<=currNs && currFrac.getNum()<=currNs){ currFrac.putInAns(); mine.makeNew(currFrac.getBackFrac(), currFrac); mine.makeNew(currFrac, currFrac.getFrontFrac()); } } currNs+=1; } } Fraction currFrac=ans; System.out.print("0/1"); while(currFrac.getFrontFrac()!=null){ currFrac=currFrac.getFrontFrac(); if (currFrac.ans()) System.out.print(", " + currFrac.getNum() + "/" + currFrac.getDen()); } } public void makeNew(Fraction back, Fraction front){//back is earlier in list Fraction curr=new Fraction(back.getNum()+front.getNum(),back.getDen()+front.getDen()); back.setFront(curr); curr.setFront(front); curr.setBack(back); front.setBack(curr); //front.setBack(back); //back.setFront(front); } public class Fraction{ int numerator; int denominator; boolean inAns=false; Fraction pointerForward=null; Fraction pointerBackward=null; public Fraction(int num, int den){ numerator=num; denominator=den; } public int getDen(){ return denominator; } public int getNum(){ return numerator; } public Fraction getFrontFrac(){ return pointerForward; } public Fraction getBackFrac(){ return pointerBackward; } public void setFront(Fraction frac){ pointerForward=frac; } public void setBack(Fraction frac){ pointerBackward=frac; } public void putInAns(){ inAns=true; } public boolean ans(){ return inAns; } } }