1 条题解

  • 1
    @ 2022-11-17 20:43:05
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int a[25];
    int ans;
    bool is_prime(int x)
    {
        if (x < 2)
            return false;
        for (int i = 2; i * i <= x; i++)
            if (x % i == 0)
                return false;
        return true;
    }
    int dis[10];//dis[i]:第i个数选择ans[i] 
    bool vis[10];//vis[i]:a[i]有没有被选过 
    bool check(int nn){
    	int X=0;
    	for(int i=1;i<=nn;i++)
    		X+=i*dis[i];
    	return is_prime(X);
    }
    //当前考虑选谁作为第step个数
    void dfs(int step){
    	//之前已经选了step-1个数
    	if(check(step-1))
    		ans++;
    	if(step==n+1)
    		return;
    	//考虑第step个数选谁?
    	for(int i=1;i<=n;i++){
    		if(!vis[i])
    		{
    			//记录 
    			vis[i]=true;
    			dis[step]=a[i];
    			//做下一步 
    			dfs(step+1);
    			//取消记录 
    			vis[i]=false;
    			dis[step]=0; 
    		}
    	}
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		cin>>a[i];
    	ans=0;
    	dfs(1);
    	cout<<ans<<"\n";
    	return 0;
    }
    
    • 1

    信息

    ID
    1135
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    55
    已通过
    34
    上传者