• 【python】选数


    题目:

    """

    题目描述:

    给定一个由 n 个整数组成的序列x_1, x_2,..., x_n),以及一个整数 k ( k < n )。从这 n 个整数中选择 k 个整数相加,可以得到多种不同的和。例如,当 n = 4,k = 3,且这四个整数分别为 3,7,12,19时,所有可能的组合及其对应的和为:

    - 3 + 7 + 12 = 22

    - 3 + 7 + 19 = 29

    - 7 + 12 + 19 = 38

    - 3 + 12 + 19 = 34

    任务是计算出有多少种不同的组合,使得这些组合的和是一个素数。例如,在上述例子中,仅有一种组合的和是素数:3 + 7 + 19 = 29。

    输入格式:

    - 每个测试文件只包含一组测试数据

    - 每组测试数据的第一行包含两个整数 n 和 k (1 <= n <= 20,k < n)。

    - 第二行包含 n 个整数 x_1, x_2,..., x_n ) (1<=x_i<=5000000)。

    输出格式:

    - 对于每组输入数据,输出一个整数,表示满足条件的组合数量。

    """

    代码:

    1. # 判断一个数是否为素数
    2. def is_prime(num):
    3. if num <= 1: # 如果数小于等于1,不是素数
    4. return False
    5. # 只需要检查到数的平方根,因为如果num有因数,它必定至少有一个不大于其平方根
    6. for i in range(2, int(num**0.5) + 1):
    7. if num % i == 0: # 如果num能被任何小于它的平方根的数整除,不是素数
    8. return False
    9. return True # 如果没有找到因数,那么num是素数
    10. # 生成数组arr中所有可能的k元素组合
    11. def generate_combinations(arr, n, k):
    12. result = [] # 用于存储所有组合的列表
    13. # 辅助递归函数,用于生成组合
    14. def generate_combinations_util(current, start):
    15. # 如果当前组合的长度等于k,则将其添加到结果列表中
    16. if len(current) == k:
    17. # 创建 current 列表的一个副本 append的是一个列表
    18. result.append(current.copy())
    19. return
    20. # 递归地从数组中选择不同的元素,以构建组合
    21. for i in range(start, n):
    22. current.append(arr[i]) # 将元素加入当前组合
    23. # util实用程序
    24. generate_combinations_util(current, i + 1) # 递归调用
    25. current.pop() # 移除刚才加入的元素,以便于下一次循环添加新的元素
    26. generate_combinations_util([], 0) # 调用辅助函数
    27. return result # 返回所有组合
    28. # 读取输入
    29. n, k = map(int, input().split()) # 读取n和k
    30. a = list(map(int, input().split())) # 读取数组a
    31. count = 0 # 用于计数满足条件的组合数量
    32. # 获取所有可能的组合
    33. combinations = generate_combinations(a, n, k)
    34. # 遍历每一个组合
    35. for combo in combinations:
    36. # 如果组合的和是素数
    37. if is_prime(sum(combo)):
    38. count += 1 # 计数增加
    39. # 输出满足条件的组合总数
    40. print(count)

     

  • 相关阅读:
    uni-app webview 打开baidu.com
    JDK1.8更便捷获取时间的方法:LocalDateTime、LocalDate、LocalTime、Period
    ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析
    FreeRTOS多任务管理
    Scanner之nextInt()方法的使用
    Label 与 Label Selector
    【2022感恩节活动营销理念】跨境电商卖家必知 !
    【踩坑系列】uniapp之h5 跨域的问题
    问遍了身边的面试官朋友,我整理出这份 Java 集合高频面试题(2021年最新版)
    vue---十分钟搞懂vue计算属性
  • 原文地址:https://blog.csdn.net/fdxy12138/article/details/134391298