1 条题解

  • 8
    @ 2026-7-15 10:40:51
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 5e6+10;
    
    int n,k;
    int a[30];
    
    vector<bool> isp;
    
    void pre() {
    	isp.resize(1.5e8);
    	fill(isp.begin(), isp.end(), true);
    	
    	for(int p=2;p<=1.25e8;p++) {
    		if(!isp[p])
    			continue;
    			
    		for(int q=2;p*q<=1.25e8;q++) {
    			isp[p*q] = false;
    		}
    	}
    }
    
    bool isprime(int x) {
    	return isp[x];
    }
    
    int ans[30], ans2=0;
    
    void dfs(int p, int last) {
    	if(p == k+1) {
    		int sum = 0;
    		for(int i=1;i<=k;i++) {
    			sum += a[ans[i]];
    		}
    		
    		if(isprime(sum))
    			ans2++;
    		
    		return;
    	}
    	
    	for(int i=last+1;i<=n;i++) {
    		ans[p] = i;
    		dfs(p+1, i);
    	}
    }
    
    int main() {
    	pre();
    	
    	cin>>n>>k;
    	
    	for(int i=1;i<=n;i++) {
    		cin>>a[i];
    	}
    	
    	dfs(1, 0);
    	
    	cout<<ans2;
    	
        return 0;
    }
    
    • 1

    信息

    ID
    5158
    时间
    1500ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    499
    已通过
    96
    上传者