số Fibonacci và số nguyên tố với Python

 

Bài toán. Số Fibonacci và số nguyên tố:

a) Tìm số Fibonacci thứ n (n <= 40)

b) Tìm các số Fibonacci nhỏ hơn hoặc bằng n.

c) Tìm các số Fibonacci nằm trên đoạn [m, n].

d) Tìm các số vừa là số Fibonacci vừa là số nguyên tố trên đoạn [m, n].

Yêu cầu: Nhập vào số n. Trong file đầu ra ghi 4 kết quả như trên. Ví dụ: 

FIBONACCI.INP

FIBONACCI.OUT

3 40

102334155

1 1 2 3 5 8 13 21 34

5 8 13 21 34

5 13

Code tham khảo:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import math
def nguyenTo(n):
    if n < 2: return False
    else:
        m = math.sqrt(n)
        i = 2
        while (n % i) and (i < m):
            i = i + 1
        if i > m: return True
        else: return False
def Fibonacci(n):
    a = 1
    b = 1
    if n == 1:
        return 1
    else:
        for i in range(1, n):
            c = a + b
            a = b
            b = c
        return b
fin = open("FIBONACCI.INP","r")
fout = open("FIBONACCI.OUT","w")
a = fin.readline()
b = a.split()
m, n = int(b[0]), int(b[1])
fout.write(str(Fibonacci(n))+"\n")
for i in range(0,n):
    if Fibonacci(i) < n:
        fout.write(str(Fibonacci(i))+" ")
fout.write("\n")
for i in range(1, n):
    if Fibonacci(i) > m and Fibonacci(i) < n:
        fout.write(str(Fibonacci(i)) + " ")
fout.write("\n")
i = m+1
while Fibonacci(i) < n:
    fi = Fibonacci(i)
    if nguyenTo(fi):
        fout.write(str(fi) + " ")
    i = i + 1
fin.close()
fout.close()