Pisano periods, drawn

Take the Fibonacci numbers modulo m — keep only the remainder after dividing by m — and the sequence repeats. The length of that repeat is the Pisano period, written π(m), and it is different for every modulus in a way the arithmetic does not advertise: π(10) is 60, π(11) is 10. Draw the residues instead of listing them and the repeat becomes a figure. Every one here is generated by pisano gallery; for the interactive version — the same designs drawn live in a shell compiled to WebAssembly — see the desktop.

The number line, moduli 1–9

The reference case. Reduced mod m the naturals cycle through every remainder in order, so the chords close up into a regular polygon every time. Everything interesting below is a departure from this.

m=1 · π=1 · 1z
m=2 · π=2 · 1z · sym
m=3 · π=3 · 1z · sym
m=4 · π=4 · 1z · sym
m=5 · π=5 · 1z · sym
m=6 · π=6 · 1z · sym
m=7 · π=7 · 1z · sym
m=8 · π=8 · 1z · sym
m=9 · π=9 · 1z · sym

Fibonacci, moduli 1–9

The same construction on the Fibonacci remainders. Mod 5 happens to use every possible chord; mod 6 keeps a mirror axis; mod 8 has none.

m=1 · π=1 · 1z
m=2 · π=3 · 1z · sym
m=3 · π=8 · 2z · sym
m=4 · π=6 · 1z
m=5 · π=20 · 4z · sym
m=6 · π=24 · 2z · sym
m=7 · π=16 · 2z · sym
m=8 · π=12 · 2z
m=9 · π=24 · 2z · sym

Fibonacci, modulus 10

A period of 60, so far more chords than its neighbors, and still symmetrical.

m=10 · π=60 · 4z · sym

Fibonacci moduli 8, 21, 55

Near-duplicates of one another. All three moduli are Fibonacci numbers, all three periods hold two zeros, none of the three is symmetrical.

m=8 · π=12 · 2z
m=21 · π=16 · 2z
m=55 · π=20 · 2z

Fibonacci moduli 13, 34, 89

The other family, alternating with the first as you count down the Fibonacci numbers. Four zeros each, symmetrical each — one family looks like the other copied and folded onto itself.

m=13 · π=28 · 4z · sym
m=34 · π=36 · 4z · sym
m=89 · π=44 · 4z · sym

Lucas moduli 7, 18, 47

The same splitting into two families happens to the Lucas numbers, at moduli that are themselves Lucas numbers.

m=7 · π=16 · 2z · sym
m=18 · π=24 · 2z · sym
m=47 · π=32 · 2z · sym

Lucas moduli 11, 29, 76

The second Lucas family.

m=11 · π=10 · 1z
m=29 · π=14 · 1z
m=76 · π=18 · 1z

Five sequences, all at modulus 10

Fibonacci, Lucas, triangular, the naturals, and the primes. Fibonacci is the ingredient, not the recipe. The primes are the odd one out: their residues never repeat, so there is no loop to close and the figure is an open path — mostly landing on 1, 3, 7 and 9.

m=10 · π=60 · 4z · sym
m=10 · π=12 · 0z · sym
m=10 · π=20 · 4z
m=10 · π=10 · 1z · sym
m=10 · no period

Fibonacci × 2, moduli 1–24

Multiplying the sequence through by 2 makes the plain designs reappear at every 2th modulus, with new ones interleaved between them. That is the "design m/2" labeling — m is still an integer modulus, and there is no such thing as mod m/2.

m=1 · π=1 · 1z
m=2 · π=1 · 1z
m=3 · π=8 · 2z · sym
m=4 · π=3 · 1z · sym
m=5 · π=20 · 4z · sym
m=6 · π=8 · 2z · sym
m=7 · π=16 · 2z · sym
m=8 · π=6 · 1z
m=9 · π=24 · 2z · sym
m=10 · π=20 · 4z · sym
m=11 · π=10 · 1z
m=12 · π=24 · 2z · sym
m=13 · π=28 · 4z · sym
m=14 · π=16 · 2z · sym
m=15 · π=40 · 2z
m=16 · π=12 · 2z
m=17 · π=36 · 4z · sym
m=18 · π=24 · 2z · sym
m=19 · π=18 · 1z
m=20 · π=60 · 4z · sym
m=21 · π=16 · 2z
m=22 · π=10 · 1z
m=23 · π=48 · 2z · sym
m=24 · π=24 · 2z

Fibonacci × 3, moduli 1–24

Multiplying the sequence through by 3 makes the plain designs reappear at every 3th modulus, with new ones interleaved between them. That is the "design m/3" labeling — m is still an integer modulus, and there is no such thing as mod m/3.

m=1 · π=1 · 1z
m=2 · π=3 · 1z · sym
m=3 · π=1 · 1z
m=4 · π=6 · 1z
m=5 · π=20 · 4z · sym
m=6 · π=3 · 1z · sym
m=7 · π=16 · 2z · sym
m=8 · π=12 · 2z
m=9 · π=8 · 2z · sym
m=10 · π=60 · 4z · sym
m=11 · π=10 · 1z
m=12 · π=6 · 1z
m=13 · π=28 · 4z · sym
m=14 · π=48 · 2z · sym
m=15 · π=20 · 4z · sym
m=16 · π=24 · 2z
m=17 · π=36 · 4z · sym
m=18 · π=24 · 2z · sym
m=19 · π=18 · 1z
m=20 · π=60 · 2z
m=21 · π=16 · 2z · sym
m=22 · π=30 · 1z
m=23 · π=48 · 2z · sym
m=24 · π=12 · 2z

Fibonacci × 4, moduli 1–24

Multiplying the sequence through by 4 makes the plain designs reappear at every 4th modulus, with new ones interleaved between them. That is the "design m/4" labeling — m is still an integer modulus, and there is no such thing as mod m/4.

m=1 · π=1 · 1z
m=2 · π=1 · 1z
m=3 · π=8 · 2z · sym
m=4 · π=1 · 1z
m=5 · π=20 · 4z · sym
m=6 · π=8 · 2z · sym
m=7 · π=16 · 2z · sym
m=8 · π=3 · 1z · sym
m=9 · π=24 · 2z · sym
m=10 · π=20 · 4z · sym
m=11 · π=10 · 1z
m=12 · π=8 · 2z · sym
m=13 · π=28 · 4z · sym
m=14 · π=16 · 2z · sym
m=15 · π=40 · 2z
m=16 · π=6 · 1z
m=17 · π=36 · 4z · sym
m=18 · π=24 · 2z · sym
m=19 · π=18 · 1z
m=20 · π=20 · 4z · sym
m=21 · π=16 · 2z
m=22 · π=10 · 1z
m=23 · π=48 · 2z · sym
m=24 · π=24 · 2z · sym

Fibonacci, moduli 1–40

The contact sheet. Longer periods give busier figures, but length alone does not decide whether one comes out symmetrical — the zero count does.

m=1 · π=1 · 1z
m=2 · π=3 · 1z · sym
m=3 · π=8 · 2z · sym
m=4 · π=6 · 1z
m=5 · π=20 · 4z · sym
m=6 · π=24 · 2z · sym
m=7 · π=16 · 2z · sym
m=8 · π=12 · 2z
m=9 · π=24 · 2z · sym
m=10 · π=60 · 4z · sym
m=11 · π=10 · 1z
m=12 · π=24 · 2z
m=13 · π=28 · 4z · sym
m=14 · π=48 · 2z · sym
m=15 · π=40 · 2z
m=16 · π=24 · 2z
m=17 · π=36 · 4z · sym
m=18 · π=24 · 2z · sym
m=19 · π=18 · 1z
m=20 · π=60 · 2z
m=21 · π=16 · 2z
m=22 · π=30 · 1z
m=23 · π=48 · 2z · sym
m=24 · π=24 · 2z
m=25 · π=100 · 4z · sym
m=26 · π=84 · 4z · sym
m=27 · π=72 · 2z · sym
m=28 · π=48 · 2z
m=29 · π=14 · 1z
m=30 · π=120 · 2z
m=31 · π=30 · 1z
m=32 · π=48 · 2z
m=33 · π=40 · 2z
m=34 · π=36 · 4z · sym
m=35 · π=80 · 2z
m=36 · π=24 · 2z
m=37 · π=76 · 4z · sym
m=38 · π=18 · 1z
m=39 · π=56 · 2z
m=40 · π=60 · 2z

Fibonacci, moduli 41–80

Further out, where the near-duplicate families keep recurring.

m=41 · π=40 · 2z · sym
m=42 · π=48 · 2z
m=43 · π=88 · 2z · sym
m=44 · π=30 · 1z
m=45 · π=120 · 2z
m=46 · π=48 · 2z · sym
m=47 · π=32 · 2z · sym
m=48 · π=24 · 2z
m=49 · π=112 · 2z · sym
m=50 · π=300 · 4z · sym
m=51 · π=72 · 2z
m=52 · π=84 · 2z
m=53 · π=108 · 4z · sym
m=54 · π=72 · 2z · sym
m=55 · π=20 · 2z
m=56 · π=48 · 2z
m=57 · π=72 · 2z
m=58 · π=42 · 1z
m=59 · π=58 · 1z
m=60 · π=120 · 2z
m=61 · π=60 · 4z · sym
m=62 · π=30 · 1z
m=63 · π=48 · 2z
m=64 · π=96 · 2z
m=65 · π=140 · 4z · sym
m=66 · π=120 · 2z
m=67 · π=136 · 2z · sym
m=68 · π=36 · 2z
m=69 · π=48 · 2z
m=70 · π=240 · 2z
m=71 · π=70 · 1z
m=72 · π=24 · 2z
m=73 · π=148 · 4z · sym
m=74 · π=228 · 4z · sym
m=75 · π=200 · 2z
m=76 · π=18 · 1z
m=77 · π=80 · 2z
m=78 · π=168 · 2z
m=79 · π=78 · 1z
m=80 · π=120 · 2z

Turtle paths with no modulus at all

Odd turns left and steps, even turns right and steps, zero does neither. The naturals alternate odd and even and make a staircase. Fibonacci runs odd, odd, even, so it turns left, left, right — and closes into something that looks like a plus sign. The triangular numbers cancel two lefts against two rights and drift instead.

nat · 2 · open
fib · 3 · closed
tri · 4 · open
lucas · 3 · closed

Fibonacci turtle paths, moduli 1–40

Now the remainders drive the turns, so a residue of zero also stops it. Some paths close on themselves; others repeat a motif off to infinity, drawn here for three passes. Which one happens is decided by the net turn over a single pass, and nothing else.

m=1 · 1 · closed
m=2 · 3 · closed
m=3 · 8 · open
m=4 · 6 · closed
m=5 · 20 · closed
m=6 · 24 · closed
m=7 · 16 · open
m=8 · 12 · closed
m=9 · 24 · open
m=10 · 60 · closed
m=11 · 10 · closed
m=12 · 24 · closed
m=13 · 28 · open
m=14 · 48 · closed
m=15 · 40 · open
m=16 · 24 · closed
m=17 · 36 · open
m=18 · 24 · closed
m=19 · 18 · closed
m=20 · 60 · closed
m=21 · 16 · open
m=22 · 30 · closed
m=23 · 48 · open
m=24 · 24 · closed
m=25 · 100 · open
m=26 · 84 · open
m=27 · 72 · open
m=28 · 48 · closed
m=29 · 14 · closed
m=30 · 120 · closed
m=31 · 30 · closed
m=32 · 48 · closed
m=33 · 40 · open
m=34 · 36 · open
m=35 · 80 · open
m=36 · 24 · closed
m=37 · 76 · closed
m=38 · 18 · closed
m=39 · 56 · open
m=40 · 60 · closed

Fibonacci turtle paths, moduli 41–80

The same, further out.

m=41 · 40 · open
m=42 · 48 · closed
m=43 · 88 · open
m=44 · 30 · closed
m=45 · 120 · open
m=46 · 48 · closed
m=47 · 32 · open
m=48 · 24 · closed
m=49 · 112 · open
m=50 · 300 · closed
m=51 · 72 · open
m=52 · 84 · closed
m=53 · 108 · closed
m=54 · 72 · closed
m=55 · 20 · closed
m=56 · 48 · closed
m=57 · 72 · open
m=58 · 42 · closed
m=59 · 58 · closed
m=60 · 120 · closed
m=61 · 60 · open
m=62 · 30 · closed
m=63 · 48 · open
m=64 · 96 · closed
m=65 · 140 · open
m=66 · 120 · closed
m=67 · 136 · open
m=68 · 36 · closed
m=69 · 48 · open
m=70 · 240 · closed
m=71 · 70 · closed
m=72 · 24 · closed
m=73 · 148 · open
m=74 · 228 · open
m=75 · 200 · open
m=76 · 18 · closed
m=77 · 80 · open
m=78 · 168 · closed
m=79 · 78 · closed
m=80 · 120 · closed

Turtle paths shared between moduli

These moduli trace the same figure as each other up to where it sits and which way it faces: 6, 12, 16, 18, 24, 36 and 48 all draw one shape, and 14, 28, 32, 42 and 46 another.

m=6 · 24 · closed
m=12 · 24 · closed
m=16 · 24 · closed
m=18 · 24 · closed
m=24 · 24 · closed
m=36 · 24 · closed
m=48 · 24 · closed
m=14 · 48 · closed
m=28 · 48 · closed
m=32 · 48 · closed
m=42 · 48 · closed
m=46 · 48 · closed

Lucas turtle paths, moduli 1–24

The same walk over a different sequence.

m=1 · 1 · closed
m=2 · 3 · closed
m=3 · 8 · open
m=4 · 6 · closed
m=5 · 4 · open
m=6 · 24 · closed
m=7 · 16 · open
m=8 · 12 · closed
m=9 · 24 · open
m=10 · 12 · closed
m=11 · 10 · closed
m=12 · 24 · closed
m=13 · 28 · open
m=14 · 48 · closed
m=15 · 8 · closed
m=16 · 24 · closed
m=17 · 36 · open
m=18 · 24 · closed
m=19 · 18 · closed
m=20 · 12 · closed
m=21 · 16 · closed
m=22 · 30 · closed
m=23 · 48 · open
m=24 · 24 · closed

Triangular turtle paths, moduli 1–24

And over the triangular numbers, whose rule for making terms has nothing to do with the other two.

m=1 · 1 · closed
m=2 · 4 · closed
m=3 · 3 · closed
m=4 · 8 · closed
m=5 · 5 · closed
m=6 · 12 · open
m=7 · 7 · closed
m=8 · 16 · closed
m=9 · 9 · closed
m=10 · 20 · open
m=11 · 11 · closed
m=12 · 24 · open
m=13 · 13 · closed
m=14 · 28 · open
m=15 · 15 · closed
m=16 · 32 · closed
m=17 · 17 · closed
m=18 · 36 · open
m=19 · 19 · closed
m=20 · 40 · open
m=21 · 21 · closed
m=22 · 44 · open
m=23 · 23 · closed
m=24 · 48 · open