题目内容
有一个整数序列 x0,x1,x2,…,其中 x0=1modM, x1=1modM,且对于所有 i≥0,满足 xi+2=(A⋅xi+1+B⋅xi)modM。
给定系数 A,B 和模数 M,以及若干询问,请你对每个询问输出对应位置的序列值。
保证 1≤A,B,M≤108,询问次数 q 满足 1≤q≤50000,每次询问的下标 k 满足 1≤k≤50000。
输入描述
第一行包含三个整数 A,B,M。
第二行包含一个整数 q,表示询问次数。
第三行包含 q 个整数 k1,k2,…,kq,表示需要查询的下标。
输出描述
输出一行,包含 q 个整数,用空格分隔,依次表示每个询问的答案。
样例1
输入
3 2 7
5
1 2 3 4 5
输出
1 5 3 5 0
说明
序列初始值为 x0=1,x1=1。给定 c1=3,c2=2,p=7。
递推计算:
- x2=(3×1+2×1)mod7=5
- x3=(3×5+2×1)mod7=17mod7=3
- x4=(3×3+2×5)mod7=19mod7=5
- x5=(3×5+2×3)mod7=21mod7=0
因此对于查询下标
1, 2, 3, 4, 5,依次输出 1, 5, 3, 5, 0。
样例2
输入
1 1 10
6
1 2 3 4 5 6
输出
1 2 3 5 8 3
说明
该组参数下递推式变为 xi+2=(xi+1+xi)mod10,即斐波那契数列模 10。
x0=1,x1=1;
- x2=(1+1)mod10=2
- x3=(2+1)mod10=3
- x4=(3+2)mod10=5
- x5=(5+3)mod10=8
- x6=(8+5)mod10=3
查询下标
1 到 6 对应上述值,输出 1 2 3 5 8 3。
样例3
输入
1 1 10
3
10 20 50000
输出
9 6 6
说明
同样是 xi+2=(xi+1+xi)mod10。前几项为 1,1,2,3,5,8,3,1,4,5,9(x0 到 x10),因此 x10=9。
继续递推可得 x20=6。模 10 下该序列的周期为 60,而 50000≡20(mod60),故 x50000=x20=6。
即使 k 达到 50000,也能通过递推或周期性得到结果。输出 9 6 6。