ピューピルス・ブルーブリッジ・カップ・パイソン・ブレークスルー |

人形からPythonを学ぼう!Blue Bridge Cup Python 学習およびテスト準備プロセスの質問を記録し、あらゆる瞬間を記録します。

概要投稿を添付します: Pupils Blue Bridge Cup Python Breakthrough | Summary_COCOgsta のブログ - CSDN ブログ


【説明】

n 個の整数 x1、x2、...、xn と 1 個の整数 k (k<n) がわかります。一連の合計は、n 個の整数から選択された任意の k 個の整数を加算することによって取得できます。たとえば、n=4、k=3、4 つの整数がそれぞれ 3、7、12、19 の場合、すべての組み合わせとその合計は次のように求めることができます。

3+7+12=22

3+7+19=29

7+12+19=38

3+12+19=34

ここで、素数となる和がいくつあるかを計算するように求められます。

たとえば、上の例では、素数となる和は 3+7+19=29 の 1 種類だけです。

【説明を入力】

最初の行は、2 つのスペースで区切られた整数 n、k (1≤n≤20、k<n) です。

2 行目には、n 個の整数 (x1、x2、...、xn (1≤xi≤5x10e6)) が含まれています。

【出力説明】

種の数を表す整数を出力します。

【入力例】

4 3

3 7 12 19

【出力例】

1

【コード説明】

from math import *
from itertools import *
def is_prime(n):
    if n == 1: return False
    m = int(sqrt(n)+1)                 #sqrt(n)可以写为n**0.5
    for i in range(2,m):
        if n % i == 0:  return False
    return True
n,k = map(int,input().split())
q = [0] #存数据
[q.append(int(i)) for i in input().split()]
res = 0
arr = [0 for i in range(k+1)] 

def dfs(x, start):
    global res
    if x > k:
        sum = 0
        for i in range(1, k+1):
            sum += arr[i]
        if(is_prime(sum)):
            res += 1
        return

    for i in range(start, n+1):
        arr[x] = q[i]
        dfs(x+1, i+1)
        arr[x] = 0


dfs(1, 1)
print(res)
复制代码

【運用結果】

4 3
3 7 12 19
1

著者:プログラミング大好き特派員
リンク:https ://juejin.cn/post/7231347985271013413/
出典:レアアースナゲット
著作権は著者に帰属します。商業的転載の場合は著者に連絡して承認を求め、非商業的転載の場合は出典を明記してください。

おすすめ

転載: blog.csdn.net/guolianggsta/article/details/130593876