某种特殊的数列a1, a2, a3, ...的定义如下:a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。
给出任意一个正整数k,求该数列的第k项模以32767的结果是多少?
某种特殊的数列a1, a2, a3, ...的定义如下:a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。
给出任意一个正整数k,求该数列的第k项模以32767的结果是多少?
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。
n行,每行输出对应一个输入。输出应是一个非负整数。
2 1 8
1 408
n = int(input()) in_list = [1, 2] for i in range(n): x = int(input()) while len(in_list) < x: in_list.append((2*in_list[-1] + in_list[-2]) % 32767) print(in_list[x-1])
res = [1, 2]
for i in range(int(input())):
k = int(input()) # 数列的第k项
while len(res) < k:
res.append(2 * res[-1] + res[-2])
print(res[k - 1] % 32767)
运行时间:910ms
可以将模运算
放在循环体中:
res = [1, 2]
for i in range(int(input())):
k = int(input()) # 数列的第k项
while len(res) < k:
res.append((2 * res[-1] + res[-2])% 32767)
print(res[k - 1] )
运行时间:367ms