在 Python 中找出从无限序列生成的向量的标量积的程序
假设我们给定了三个整数c、m和n。我们必须生成一个无限序列,其中第一个值为0,第二个值为c,从第三个值开始,它等于ki=(ki-2+ki-1)modm。我们必须生成系列中直到项目k2n+1的所有值。现在从系列的值;我们将序列中的两个连续值作为二维向量的x和y坐标,并生成n个向量。需要注意的是,我们使用从第三个值开始的序列中的值。还有另一个集合S,其中每个值都是向量i和向量j的标量积,其中1<=i,j<=n和i!=j。我们必须找出集合S中不同残基的数量。如果该值非常大,我们将其修改为m。
所以,如果输入像5、6、4,那么输出将是3
生成的序列为:[0,5,5,4,3,1,4,5,3,2]。
向量是:(5,4),(3,1),(4,5),(3,2)。
从向量的标量积来看,集合S中只有三个残差值mod6。
结果是3mod6=3。
示例
让我们看看以下实现以获得更好的理解-
def solve(c, m, n): if (n == 1): return 0 else: temp_arr=[0 for i in range(2 * n+2)] temp_arr[0] = 0 temp_arr[1] = c arr2 = [] for i in range(2, 2 * n+2): temp_arr[i] = (temp_arr[i - 1] + temp_arr[i - 2]) % m for i in range(2, 2 * n-2, 2): temp = (temp_arr[i] * temp_arr[i + 2] + temp_arr[i + 1] * temp_arr[i + 3]) % m arr2.append(temp) temp = (temp_arr[i] * temp_arr[i+4] + temp_arr[i+1] * temp_arr[i+5]) % m arr2.append(temp) temp = (temp_arr[2 * n-2] * temp_arr[2 * n] + temp_arr[2 * n- 1] * temp_arr[2 * n+1]) % m arr2.append(temp) arr2 = set(arr2) return len(arr2) print(solve(5, 6, 4))
输入
5, 6, 4输出结果
3