Python程序:查找将多个金属棒材料装入容器所需的操作次数
假设我们的任务是运输多个不同尺寸的金属棒材料。但是运输容器长度不足,只能容纳长度为1的棒材料。我们被提供了n个金属棒材料,它们的长度以列表形式给出。因此,为了将所有材料装入容器,我们必须切割和分割所有材料,使它们成为单位尺寸。然后,我们将所有材料装入容器中,这将花费我们一次操作。我们需要找到执行材料所需的操作次数。
因此,如果输入为input_arr = [6, 3, 7],则输出将为22。
- 将大小为6的材料制成尺寸为1的材料,我们需要进行10次操作。
-
将大小为3的材料制成尺寸为1的材料,我们需要进行4次操作。
-
将大小为7的材料制成尺寸为1的材料,我们需要进行8次操作。
为了解决这个问题,我们将执行以下步骤−
- 定义一个函数prime_find()。其中输入为input_num。
- prime_check := 大小为floor value ((input_num-1) / 2)的新列表,值为True。
-
对于在3到(√(input_num)+1)的floor值范围内的p_num,增量为2,执行以下操作:
- 如果prime_check[floor value((p_num-3)/2)]非零,则
-
对于范围在prime_check内的floor value((p_num ^ 2-3) / 2)到p_num的每个元素,执行以下操作:
- prime_check[element] := 大小为(floor value((input_num-p_num ^ 2)/(2 * p_num) + 1))的新列表,值为False。
- 对于i在0到(floor value((input_num-1) / 2))的范围内,执行以下操作:
- 如果prime_check[i]为True,则
-
返回包含值2 + 2 * i + 3的列表。
-
从主函数中,执行以下操作−
- prime_nums := prime_find(10 ^ 6 + 100)
-
result := 0
-
对于input_arr中的每个值,执行以下操作:
- result := result + value
-
f_list := 新列表。
-
对于prime_nums中的每个p_num,执行以下操作:
-
当value mod p_num相同时,执行以下操作:
- 将p_num插入f_list的末尾。
-
value := floor value of (value / p_num)。
-
如果p_num ^ 2 > value,则
- 如果value > 1,则
-
将值插入f_list的末尾。
-
退出循环。
-
-
temp := 1
-
对于f_list中每个p_num的反向顺序,执行以下操作:
-
result := result + temp
-
temp := temp * p_num
-
-
返回结果。
- prime_nums := prime_find(10 ^ 6 + 100)
示例
让我们看下面的实现以获得更好的理解−
from math import floor,sqrt
def prime_find(input_num):
prime_check = [True]*((input_num-1)//2)
for p_num in range(3,floor(sqrt(input_num))+1,2):
if prime_check[(p_num-3)//2]: prime_check[(p_num**2-3)//2::p_num] = [False] * ((input_num-p_num**2)//(2*p_num) + 1)
return [2]+[2*i+3 for i in range((input_num - 1) // 2) if prime_check[i]]
def solve(input_arr):
prime_nums = prime_find(10**6+100)
result = 0
for value in input_arr:
result += value
f_list = []
for p_num in prime_nums:
while value % p_num == 0:
f_list.append(p_num)
value //= p_num
if p_num**2 > value:
if value > 1:
f_list.append(value)
break
temp = 1
for p_num in f_list[-1::-1]:
result += temp
temp *= p_num
return result
if __name__ == "__main__":
print(solve([6, 3, 7]))
输入
[6, 3, 7]
输出
22