# primechain.frink

``` // Program to find the largest number that is made up of the concatenation of // unique n-digit prime numbers. // For example, for 2-digit primes, the sequence 31, 11, 17, 79 becomes // the number 31179. start = now[] digits = eval[input["Enter length of chain: ", 3]] // Find limits of range smallest = 1 for i = 1 to digits-1    smallest = smallest * 10 + 1 largest = smallest * 9 leading = new dict n = smallest // Find prime numbers in this range while n <= largest {    if isPrime[n]    {       ns = "\$n"       lead = substringLen[ns, 0, digits-1]       if leading@lead          leading@lead.pushFirst[[ns, false]]       else          leading@lead = [[ns, false]]    }    n = nextPrime[n] } sortedList = new array              stack = new array greatest = 0 for [num, list] reverse[sort[leading, byColumn]] {    c = 0    for c = 0 to length[list]-1    {       list@c@1 = true           // Mark used       n = list@c@0       greatest = test[n, digits, stack, leading, greatest]       list@c@1 = false    } } // Recursive function to test numbers. test[n, digits, stack, leading, greatest] := {    stack.push[n]    if (length[stack] > greatest)    {       greatest = length[stack]       println["\$stack\t(\$greatest)"]    }    n = substringLen[n, 1, digits-1]    for i = 0 to length[leading@n]-1    {       if leading@n@i@1 == false       {          leading@n@i@1 = true        // Mark used          greatest = test[leading@n@i@0, digits, stack, leading, greatest]          leading@n@i@1 = false       }    }    stack.pop[]    return greatest } ```