Sonnet primes in Python

A while back I wrote about sonnet primes, primes of the form ababcdcdefefgg where the letters a through g represent digits and a is not zero. The name comes from the rhyme scheme of an English (Shakespearean) sonnet.

In the original post I gave Mathematica code to find all sonnet primes. This post shows how to do it in Python.

from sympy.ntheory import isprime
from itertools import permutations

def number(t):
    # turn a tuple into a number
    return 10100000000000*t[0] + 1010000000000*t[1] 
           +   1010000000*t[2] +     101000000*t[3] 
           +       101000*t[4] +         10100*t[5] 
           +           11*t[6]

sonnet_numbers = (number(t) for t in 
    permutations(range(10), 7) if t[0] != 0)

sonnet_primes = filter(isprime, sonnet_numbers)
Tagged with: ,
Posted in Python
2 comments on “Sonnet primes in Python
  1. Evpok says:

    Rather than filter, I would have used

    sonnet_primes = (number for number in sonnet_numbers if isprime(number))

    It is a bit more verbose, but it looks more obvious to me, especially in the context of mathematics

  2. Rob Green says:

    Love the alignment of your code! Makes everything look beautiful, even poetic.

1 Pings/Trackbacks for "Sonnet primes in Python"
  1. [...] I could rewrite them using Python. For example, I rewrote my code for finding sonnet primes in Python a few days ago. Next I wanted to try testing the Narcissus [...]