Python程序找出超矩形单元格中值的总和
超矩形是一个具有k维的矩形。每个维度都有一个长度,可以表示为n1、n2、n3、…、nm。超矩形的单元格被寻址为(p,q,r,…),并包含一个等于(p,q,r,…)的最大公约数的值。这里1 <= p <= n1,1 <= q <= n1,依此类推。我们的任务是确定所有单元格值gcd(p,q,r,…)的总和。结果以模10^9 + 7返回。索引从1到n。
因此,如果输入类似于input_arr = [[2, 2], [5, 5]],则输出将为[5, 37]
有两个实例作为输入给出,我们必须确定这两个给定实例的总和。在每个实例中,超矩形是4x4的二维矩形,并且给出长度。地址(p,q)和gcd(p,q)将如下所示:
(p,q) value gcd(p,q) (1, 1) (1, 2) 1 1 (2, 1) (2, 2) 1 2
最大公约数之和 = 1 + 1 + 1 + 2 = 5
在第二个实例中:
(p,q) value gcd(p,q) sum(gcd of row i) (1, 1) (1, 2) (1, 3) (1, 4) (1, 5) 1 1 1 1 1 = 5 (2, 1) (2, 2) (2, 3) (2, 4) (2, 5) 1 2 1 2 1 = 7 (3, 1) (3, 2) (3, 3) (3, 4) (3, 5) 1 1 3 1 1 = 7 (4, 1) (4, 2) (4, 3) (4, 4) (4, 5) 1 2 1 4 1 = 9 (5, 1) (5, 2) (5, 3) (5, 4) (5, 5) 1 1 1 1 5 = 9
最大公约数之和 = 5 + 7 + 7 + 9 + 9 = 37
为了解决这个问题,我们将遵循以下步骤:
定义一个函数coeff_find()。这将接收test_instance和i作为参数
- value := 1
- 对于test_instance中的每个k,执行:
- value := value * (k / i) 的浮点值
- 返回value
- 从主方法/函数执行以下操作:
- output := 一个新的列表
- 对于input_arr中的每个test_instance,执行:
- min_value := test_instance的最小值
- total_value := 0
- temp_dict := 一个新的映射
- 对于从min_value到0的范围内的i,递减1,执行:
- p := coeff_find(test_instance, i)
- q := i
- 当q <= min_value时,执行:
- q := q + i
- 如果temp_dict中存在q,则:
- p := p - temp_dict[q]
- temp_dict[i] := p
- total_value := total_value + temp_dict[i]*i
- 在列表output的末尾添加(total_value mod (10^9 + 7))
- 返回output
示例
让我们看看以下实现以获得更好的理解:
def coeff_find(test_instance, i):
value = 1
for k in test_instance:
value *= k // i
return value
def solve(input_arr):
output = []
for test_instance in input_arr:
min_value = min(test_instance)
total_value = 0
temp_dict = {}
for i in range(min_value, 0, -1):
p = coeff_find(test_instance, i)
q = i
while q <= min_value:
q += i
if q in temp_dict:
p -= temp_dict[q]
temp_dict[i] = p
total_value += temp_dict[i]*i
output.append(total_value % (10**9 + 7))
return output
print(solve([[2, 2], [5, 5]]))输入
[[2, 2], [5, 5]]
输出
[5, 37]
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP