题目描述
斐波那契数列是一个形如下面的数列:
1,1,2,3,5,8,13,21,34,55,89……
从第3项开始,有:f(n)=f(n-1)+f(n-2)
在这个数列中,有些数是合数,比如8、21、34等,有些数是素数,比如2、3、5、13等。而前面两个1既不是合数也不是素数。
下面请你求出该数列中指定的第n个合数。比如n=1时,对应的数是8;n=2时,对应的数是21。
提示
输入输出格式
输入格式
一个正整数n(1≤n≤30)
输出格式
一个正整数,在斐波那契数列中排第n位的合数
输入输出样例
输入
3
输出
34
def is_prime(num):
# 判断一个数是否为素数
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
def fibonacci_composite(n):
# 求斐波那契数列中第n个合数
fib_sequence = [1, 1] # 斐波那契数列的前两项
count = 0 # 记录已生成的合数个数
i = 2 # 当前斐波那契数列的索引
while count < n:
fib_number = fib_sequence[i - 1] + fib_sequence[i - 2] # 计算下一个斐波那契数
if not is_prime(fib_number): # 判断是否为合数
count += 1
if count == n: # 找到第n个合数
return fib_number
fib_sequence.append(fib_number)
i += 1
return None
# 读取输入
n = int(input())
# 调用函数并输出结果
result = fibonacci_composite(n)
print(result)