2023.04.19 Math 3600 Pisano

163 days ago by calkin

pisano6list=[] for i in srange(30): if fibonacci(i)%6 ==0: print(i) pisano6list.append([i,fibonacci(i) % 6]) 
       
0
12
24
0
12
24
print(pisano6list) 
       
[[0, 0], [1, 1], [2, 1], [3, 2], [4, 3], [5, 5], [6, 2], [7, 1], [8, 3],
[9, 4], [10, 1], [11, 5], [12, 0], [13, 5], [14, 5], [15, 4], [16, 3],
[17, 1], [18, 4], [19, 5], [20, 3], [21, 2], [22, 5], [23, 1], [24, 0],
[25, 1], [26, 1], [27, 2], [28, 3], [29, 5]]
[[0, 0], [1, 1], [2, 1], [3, 2], [4, 3], [5, 5], [6, 2], [7, 1], [8, 3], [9, 4], [10, 1], [11, 5], [12, 0], [13, 5], [14, 5], [15, 4], [16, 3], [17, 1], [18, 4], [19, 5], [20, 3], [21, 2], [22, 5], [23, 1], [24, 0], [25, 1], [26, 1], [27, 2], [28, 3], [29, 5]]
pisano12list=[] for i in srange(50): if fibonacci(i)%12 ==0: print(i) pisano12list.append([i,fibonacci(i) % 12]) print(pisano12list) 
       
0
12
24
36
48
[[0, 0], [1, 1], [2, 1], [3, 2], [4, 3], [5, 5], [6, 8], [7, 1], [8, 9],
[9, 10], [10, 7], [11, 5], [12, 0], [13, 5], [14, 5], [15, 10], [16, 3],
[17, 1], [18, 4], [19, 5], [20, 9], [21, 2], [22, 11], [23, 1], [24, 0],
[25, 1], [26, 1], [27, 2], [28, 3], [29, 5], [30, 8], [31, 1], [32, 9],
[33, 10], [34, 7], [35, 5], [36, 0], [37, 5], [38, 5], [39, 10], [40,
3], [41, 1], [42, 4], [43, 5], [44, 9], [45, 2], [46, 11], [47, 1], [48,
0], [49, 1]]
0
12
24
36
48
[[0, 0], [1, 1], [2, 1], [3, 2], [4, 3], [5, 5], [6, 8], [7, 1], [8, 9], [9, 10], [10, 7], [11, 5], [12, 0], [13, 5], [14, 5], [15, 10], [16, 3], [17, 1], [18, 4], [19, 5], [20, 9], [21, 2], [22, 11], [23, 1], [24, 0], [25, 1], [26, 1], [27, 2], [28, 3], [29, 5], [30, 8], [31, 1], [32, 9], [33, 10], [34, 7], [35, 5], [36, 0], [37, 5], [38, 5], [39, 10], [40, 3], [41, 1], [42, 4], [43, 5], [44, 9], [45, 2], [46, 11], [47, 1], [48, 0], [49, 1]]
pisano5list=[] for i in srange(30): if fibonacci(i)%5 ==0: print(i,fibonacci(i)%5,fibonacci(i+1)%5) pisano5list.append([i,fibonacci(i) % 5]) #print(pisano5list) 
       
(0, 0, 1)
(5, 0, 3)
(10, 0, 4)
(15, 0, 2)
(20, 0, 1)
(25, 0, 3)
(0, 0, 1)
(5, 0, 3)
(10, 0, 4)
(15, 0, 2)
(20, 0, 1)
(25, 0, 3)
#pisano5list=[] p=5 for i in srange(p^2+5): if fibonacci(i)%p ==0 and fibonacci(i+1)%p==1: print(i,fibonacci(i)%p,fibonacci(i+1)%p) #pisano5list.append([i,fibonacci(i) % 5]) #print(pisano5list) 
       
(0, 0, 1)
(20, 0, 1)
(0, 0, 1)
(20, 0, 1)

We've taken our original clunky code, and made it a bit better.

p=7 for i in srange(p^2+5): if fibonacci(i)%p ==0 and fibonacci(i+1)%p==1: print(i,fibonacci(i)%p,fibonacci(i+1)%p) 
       
(0, 0, 1)
(16, 0, 1)
(32, 0, 1)
(48, 0, 1)
(0, 0, 1)
(16, 0, 1)
(32, 0, 1)
(48, 0, 1)
p=11 for i in srange(p^2+5): if fibonacci(i)%p ==0 and fibonacci(i+1)%p==1: print(i,fibonacci(i)%p,fibonacci(i+1)%p) 
       
(0, 0, 1)
(10, 0, 1)
(20, 0, 1)
(30, 0, 1)
(40, 0, 1)
(50, 0, 1)
(60, 0, 1)
(70, 0, 1)
(80, 0, 1)
(90, 0, 1)
(100, 0, 1)
(110, 0, 1)
(120, 0, 1)
(0, 0, 1)
(10, 0, 1)
(20, 0, 1)
(30, 0, 1)
(40, 0, 1)
(50, 0, 1)
(60, 0, 1)
(70, 0, 1)
(80, 0, 1)
(90, 0, 1)
(100, 0, 1)
(110, 0, 1)
(120, 0, 1)
p=13 for i in srange(p^2+5): if fibonacci(i)%p ==0 and fibonacci(i+1)%p==1: print(i,fibonacci(i)%p,fibonacci(i+1)%p) 
       
(0, 0, 1)
(28, 0, 1)
(56, 0, 1)
(84, 0, 1)
(112, 0, 1)
(140, 0, 1)
(168, 0, 1)
(0, 0, 1)
(28, 0, 1)
(56, 0, 1)
(84, 0, 1)
(112, 0, 1)
(140, 0, 1)
(168, 0, 1)
p=17 for i in srange(p^2+5): if fibonacci(i)%p ==0 and fibonacci(i+1)%p==1: print(i,fibonacci(i)%p,fibonacci(i+1)%p) 
       
(0, 0, 1)
(36, 0, 1)
(72, 0, 1)
(108, 0, 1)
(144, 0, 1)
(180, 0, 1)
(216, 0, 1)
(252, 0, 1)
(288, 0, 1)
(0, 0, 1)
(36, 0, 1)
(72, 0, 1)
(108, 0, 1)
(144, 0, 1)
(180, 0, 1)
(216, 0, 1)
(252, 0, 1)
(288, 0, 1)
p=19 for i in srange(p^2+5): if fibonacci(i)%p ==0 and fibonacci(i+1)%p==1: print(i,fibonacci(i)%p,fibonacci(i+1)%p) 
       
(0, 0, 1)
(18, 0, 1)
(36, 0, 1)
(54, 0, 1)
(72, 0, 1)
(90, 0, 1)
(108, 0, 1)
(126, 0, 1)
(144, 0, 1)
(162, 0, 1)
(180, 0, 1)
(198, 0, 1)
(216, 0, 1)
(234, 0, 1)
(252, 0, 1)
(270, 0, 1)
(288, 0, 1)
(306, 0, 1)
(324, 0, 1)
(342, 0, 1)
(360, 0, 1)
(0, 0, 1)
(18, 0, 1)
(36, 0, 1)
(54, 0, 1)
(72, 0, 1)
(90, 0, 1)
(108, 0, 1)
(126, 0, 1)
(144, 0, 1)
(162, 0, 1)
(180, 0, 1)
(198, 0, 1)
(216, 0, 1)
(234, 0, 1)
(252, 0, 1)
(270, 0, 1)
(288, 0, 1)
(306, 0, 1)
(324, 0, 1)
(342, 0, 1)
(360, 0, 1)
def pisano(p): i=2 while i<p^2+5: if fibonacci(i)%p==0 and fibonacci(i+1)%p == 1: return(i) i+=1 
       
pisano(17) 
       
36
36
pisano(7^2) 
       
112
112
pisano(7^3) 
       
784
784
pisano(7^4) 
       
5488
5488
pisano(5) 
       
20
20
pisano(5^2) 
       
100
100
pisano(5^3) 
       
500
500
pisano(5^4) 
       
2500
2500
for k in srange(10): print(pisano(2^(k+1))) 
       
3
6
12
24
48
96
192
384
768
1536
3
6
12
24
48
96
192
384
768
1536
pisano(7^5) 
       
38416
38416
pisano(97^4) 
       
Traceback (click to the left of this block for traceback)
...
__SAGE__
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_6.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cGlzYW5vKDk3XjMp"),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpLQKsOl/___code___.py", line 3, in <module>
    exec compile(u'pisano(_sage_const_97 **_sage_const_3 )
  File "", line 1, in <module>
    
  File "/tmp/tmp2AxmER/___code___.py", line 6, in pisano
    if fibonacci(i)%p==_sage_const_0  and fibonacci(i+_sage_const_1 )%p == _sage_const_1 :
  File "/usr/local/sage-6.10/local/lib/python2.7/site-packages/sage/combinat/combinat.py", line 545, in fibonacci
    return ZZ(pari(n).fibonacci())
  File "sage/libs/pari/gen.pyx", line 5326, in sage.libs.pari.gen.gen.fibonacci (/usr/local/sage-6.10/src/build/cythonized/sage/libs/pari/gen.c:123712)
  File "sage/ext/interrupt/interrupt.pyx", line 88, in sage.ext.interrupt.interrupt.sig_raise_exception (/usr/local/sage-6.10/src/build/cythonized/sage/ext/interrupt/interrupt.c:925)
KeyboardInterrupt
__SAGE__
pisano(19^4) 
       
123462
123462
pisano(13^5) 
       
799708
799708
 
       

Can we find patterns in $\pi(p)$ for primes $p$?


p=2 while p<1000: if p==pisano(p)+1: print(p,pisano(p)) p=p.next_prime() 
       
(11, 10)
(19, 18)
(31, 30)
(41, 40)
(59, 58)
(61, 60)
(71, 70)
(79, 78)
(109, 108)
(131, 130)
(149, 148)
(179, 178)
(191, 190)
(239, 238)
(241, 240)
(251, 250)
(269, 268)
(271, 270)
(311, 310)
(359, 358)
(379, 378)
(389, 388)
(409, 408)
(419, 418)
(431, 430)
(439, 438)
(449, 448)
(479, 478)
(491, 490)
(499, 498)
(569, 568)
(571, 570)
(599, 598)
(601, 600)
(631, 630)
(641, 640)
(659, 658)
(701, 700)
(719, 718)
(739, 738)
(751, 750)
(821, 820)
(839, 838)
(929, 928)
(971, 970)
(11, 10)
(19, 18)
(31, 30)
(41, 40)
(59, 58)
(61, 60)
(71, 70)
(79, 78)
(109, 108)
(131, 130)
(149, 148)
(179, 178)
(191, 190)
(239, 238)
(241, 240)
(251, 250)
(269, 268)
(271, 270)
(311, 310)
(359, 358)
(379, 378)
(389, 388)
(409, 408)
(419, 418)
(431, 430)
(439, 438)
(449, 448)
(479, 478)
(491, 490)
(499, 498)
(569, 568)
(571, 570)
(599, 598)
(601, 600)
(631, 630)
(641, 640)
(659, 658)
(701, 700)
(719, 718)
(739, 738)
(751, 750)
(821, 820)
(839, 838)
(929, 928)
(971, 970)
p=2 while p<500: if pisano(p)==2*p+2: print(p,pisano(p)) p=p.next_prime() 
       
(3, 8)
(7, 16)
(13, 28)
(17, 36)
(23, 48)
(37, 76)
(43, 88)
(53, 108)
(67, 136)
(73, 148)
(83, 168)
(97, 196)
(103, 208)
(127, 256)
(137, 276)
(157, 316)
(163, 328)
(167, 336)
(173, 348)
(193, 388)
(197, 396)
(223, 448)
(227, 456)
(257, 516)
(277, 556)
(283, 568)
(293, 588)
(313, 628)
(317, 636)
(337, 676)
(367, 736)
(373, 748)
(383, 768)
(397, 796)
(433, 868)
(443, 888)
(457, 916)
(463, 928)
(467, 936)
(487, 976)
(3, 8)
(7, 16)
(13, 28)
(17, 36)
(23, 48)
(37, 76)
(43, 88)
(53, 108)
(67, 136)
(73, 148)
(83, 168)
(97, 196)
(103, 208)
(127, 256)
(137, 276)
(157, 316)
(163, 328)
(167, 336)
(173, 348)
(193, 388)
(197, 396)
(223, 448)
(227, 456)
(257, 516)
(277, 556)
(283, 568)
(293, 588)
(313, 628)
(317, 636)
(337, 676)
(367, 736)
(373, 748)
(383, 768)
(397, 796)
(433, 868)
(443, 888)
(457, 916)
(463, 928)
(467, 936)
(487, 976)
p=2 while p<500: if pisano(p)==(p-1)/2: print(p,pisano(p)) p=p.next_prime() 
       
(29, 14)
(89, 44)
(101, 50)
(181, 90)
(229, 114)
(349, 174)
(401, 200)
(29, 14)
(89, 44)
(101, 50)
(181, 90)
(229, 114)
(349, 174)
(401, 200)
p=2 while p<1000: if pisano(p)==(p+1)*2/7: print(p,pisano(p)) p=p.next_prime() 
       
(307, 88)
(797, 228)
(307, 88)
(797, 228)

Let us be more systematic about investigating the values of $\pi(p)$.

p19=[] #Keep track of pi(p) for the two classes p37=[] # of primes p=7 while p<10000: if p%10 ==1 or p%10==9: p19.append([p,pisano(p)]) if p%10==3 or p%10==7: p37.append([p,pisano(p)]) p=p.next_prime() 
       
A=list_plot(p19) B=list_plot(p37,color='red') show(A+B) 
       

We now have the data for p19 and p37.  We can analyze it directly.

p19ratio=[] p37ratio=[] for pair in p19: p19ratio.append([pair[0],(pair[0]-1)/pair[1]]) for pair in p37: p37ratio.append( [ pair[0],(2*pair[0]+2)/pair[1] ] ) 
       
list_plot(p19ratio) 
       
list_plot(p37ratio) 
       
for pair in p37ratio: if is_even(pair[1]): print(pair) 
       
p19ratio[:100] 
       
[[11, 1],
 [19, 1],
 [29, 2],
 [31, 1],
 [41, 1],
 [59, 1],
 [61, 1],
 [71, 1],
 [79, 1],
 [89, 2],
 [101, 2],
 [109, 1],
 [131, 1],
 [139, 3],
 [149, 1],
 [151, 3],
 [179, 1],
 [181, 2],
 [191, 1],
 [199, 9],
 [211, 5],
 [229, 2],
 [239, 1],
 [241, 1],
 [251, 1],
 [269, 1],
 [271, 1],
 [281, 5],
 [311, 1],
 [331, 3],
 [349, 2],
 [359, 1],
 [379, 1],
 [389, 1],
 [401, 2],
 [409, 1],
 [419, 1],
 [421, 5],
 [431, 1],
 [439, 1],
 [449, 1],
 [461, 10],
 [479, 1],
 [491, 1],
 [499, 1],
 [509, 2],
 [521, 20],
 [541, 6],
 [569, 1],
 [571, 1],
 [599, 1],
 [601, 1],
 [619, 3],
 [631, 1],
 [641, 1],
 [659, 1],
 [661, 3],
 [691, 5],
 [701, 1],
 [709, 6],
 [719, 1],
 [739, 1],
 [751, 1],
 [761, 2],
 [769, 4],
 [809, 4],
 [811, 3],
 [821, 1],
 [829, 3],
 [839, 1],
 [859, 11],
 [881, 5],
 [911, 13],
 [919, 9],
 [929, 1],
 [941, 2],
 [971, 1],
 [991, 5],
 [1009, 8],
 [1019, 1],
 [1021, 2],
 [1031, 5],
 [1039, 1],
 [1049, 4],
 [1051, 1],
 [1061, 2],
 [1069, 3],
 [1091, 1],
 [1109, 2],
 [1129, 1],
 [1151, 5],
 [1171, 1],
 [1181, 1],
 [1201, 1],
 [1229, 2],
 [1231, 3],
 [1249, 2],
 [1259, 1],
 [1279, 3],
 [1289, 4]]
[[11, 1],
 [19, 1],
 [29, 2],
 [31, 1],
 [41, 1],
 [59, 1],
 [61, 1],
 [71, 1],
 [79, 1],
 [89, 2],
 [101, 2],
 [109, 1],
 [131, 1],
 [139, 3],
 [149, 1],
 [151, 3],
 [179, 1],
 [181, 2],
 [191, 1],
 [199, 9],
 [211, 5],
 [229, 2],
 [239, 1],
 [241, 1],
 [251, 1],
 [269, 1],
 [271, 1],
 [281, 5],
 [311, 1],
 [331, 3],
 [349, 2],
 [359, 1],
 [379, 1],
 [389, 1],
 [401, 2],
 [409, 1],
 [419, 1],
 [421, 5],
 [431, 1],
 [439, 1],
 [449, 1],
 [461, 10],
 [479, 1],
 [491, 1],
 [499, 1],
 [509, 2],
 [521, 20],
 [541, 6],
 [569, 1],
 [571, 1],
 [599, 1],
 [601, 1],
 [619, 3],
 [631, 1],
 [641, 1],
 [659, 1],
 [661, 3],
 [691, 5],
 [701, 1],
 [709, 6],
 [719, 1],
 [739, 1],
 [751, 1],
 [761, 2],
 [769, 4],
 [809, 4],
 [811, 3],
 [821, 1],
 [829, 3],
 [839, 1],
 [859, 11],
 [881, 5],
 [911, 13],
 [919, 9],
 [929, 1],
 [941, 2],
 [971, 1],
 [991, 5],
 [1009, 8],
 [1019, 1],
 [1021, 2],
 [1031, 5],
 [1039, 1],
 [1049, 4],
 [1051, 1],
 [1061, 2],
 [1069, 3],
 [1091, 1],
 [1109, 2],
 [1129, 1],
 [1151, 5],
 [1171, 1],
 [1181, 1],
 [1201, 1],
 [1229, 2],
 [1231, 3],
 [1249, 2],
 [1259, 1],
 [1279, 3],
 [1289, 4]]

Let's investigate Fermat's Little Theorem

p=13 a=11 (a^(p-1)-1)/p 
       
241417567440
241417567440
a^(p-1) % p 
       
1
1