假设我们有一个包含 n 行 m 列的矩阵。我们必须找出矩阵中元素的 gcd 大于 1 的最大连续元素数。连续元素可以在矩阵中水平或垂直。
所以,如果输入是这样的
3 | 7 | 9 | 12 |
5 | 9 | 4 | 6 |
7 | 8 | 5 | 10 |
m = 4,n = 3;那么输出将是3。
给定矩阵的第四列是 12, 6, 10。这列元素的 gcd 是 2。因为有三个元素,所以答案是 3。
让我们看看以下实现以获得更好的理解 -
from math import gcd def solve(n, m, input_list): mat = [[[0] *m] *n] *n res = 0 for i in range(n): for j in range(i, n): gcd_temp = 0 x = 0 for k in range(m): if i == j: mat[i][j][k] = input_list[i][k] else: mat[i][j][k] = gcd(mat[i][j-1][k], input_list[j][k]) gcd_temp = gcd(gcd_temp, mat[i][j][k]) if gcd_temp > 1: x += j - i + 1 else: res = max(res,x) if mat[i][j][k] > 1: gcd_temp = mat[i][j][k] x = j - i + 1 res = max(res,x) return res print(solve(3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]))
3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]输出结果
3