Farey Sequence - Next Term

Next Term

A surprisingly simple algorithm exists to generate the terms in either traditional order (ascending) or non-traditional order (descending). The algorithm computes each successive entry in terms of the previous two entries using the mediant property given above. If a/b and c/d are the two given entries, and p/q is the unknown next entry, then c/d = (a + p)/(b + q). c/d is in lowest terms, so there is an integer k such that kc = a + p and kd = b + q, giving p = kca and q = kdb. The value of k must give a value of p/q which is as close as possible to c/d, which implies that k must be as large as possible subject to kdbn, so k is the greatest integer ≤ (n + b)/d. In other words, k = (n+b)/d, and

This is implemented in Python as:

def farey( n, asc=True ): """Python function to print the nth Farey sequence, either ascending or descending.""" if asc: a, b, c, d = 0, 1, 1, n # (*) else: a, b, c, d = 1, 1, n-1, n # (*) print "%d/%d" % (a,b) while (asc and c <= n) or (not asc and a > 0): k = int((n + b)/d) a, b, c, d = c, d, k*c - a, k*d - b print "%d/%d" % (a,b)

Brute-force searches for solutions to Diophantine equations in rationals can often take advantage of the Farey series (to search only reduced forms). The lines marked (*) can also be modified to include any two adjacent terms so as to generate terms only larger (or smaller) than a given term.

Read more about this topic:  Farey Sequence

Famous quotes containing the word term:

    Orlando. Who stays it still withal?
    Rosalind. With lawyers in the vacation; for they sleep
    between term and term, and then they perceive not how Time
    moves.
    William Shakespeare (1564–1616)

    No—is a term very frequently employed by the fair, when they mean everything else but a negative. Their yes is always yes; but their no is not always no.
    Anonymous, U.S. women’s magazine contributor. M, Weekly Visitor or Ladies Miscellany, p. 203 (April 1803)