...
查看原帖
...
1398169
UMP45_404XO0楼主2025/7/29 17:43
#include <bits/stdc++.h>
using namespace std;
int n,a[105],vis[105];
int k,ans;
bool prime(int x)
{
    if (x ==1) return 0;
    for(int i=2;i*i<=n;i++)
        if (x%i==0) return 0;
    return 1;
}
void dfs(int cur, int size, int cnt)
{
    if(cnt > size) return; //可行性减脂
    if (cnt+n-cur+1 < size) return;//可行性减脂
    if (cur == n+1)
    {
        if(cnt == k)
        {
            int sum = 0;
            for(int i=1;i<=n;i++)
            {
                if(vis[i])
                {
                    sum+=a[i];
                }

            }
            //cout << sum << endl;
            if(prime(sum))
            {
                ans++;
            }
        }
        return;
    }  
    vis[cur] = 1;
    dfs(cur+1,size,cnt+1);
    vis[cur] = 0;
    dfs(cur+1,size,cnt);
}
int main()
{
    cin >> n >> k;
    for(int i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    dfs(1,k,0);
    cout << ans;
}
2025/7/29 17:43
加载中...