# 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 + 1010000000000*t
+   1010000000*t +     101000000*t
+       101000*t +         10100*t
+           11*t

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

sonnet_primes = filter(isprime, sonnet_numbers)
```

## 3 thoughts on “Sonnet primes in Python”

1. 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

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