Python程序:查找将多个金属棒材料装入容器所需的操作次数

Python程序:查找将多个金属棒材料装入容器所需的操作次数

假设我们的任务是运输多个不同尺寸的金属棒材料。但是运输容器长度不足,只能容纳长度为1的棒材料。我们被提供了n个金属棒材料,它们的长度以列表形式给出。因此,为了将所有材料装入容器,我们必须切割和分割所有材料,使它们成为单位尺寸。然后,我们将所有材料装入容器中,这将花费我们一次操作。我们需要找到执行材料所需的操作次数。

Python程序:查找将多个金属棒材料装入容器所需的操作次数

因此,如果输入为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

      • 返回结果。

示例

让我们看下面的实现以获得更好的理解−

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程