1 条题解

  • 0
    @ 2025-10-8 16:48:16
    #include<bits/stdc++.h>
    using namespace std;
     
    int n,r,a[30],b[30],v[30],ans;
    bool pd(int x)
    {
    	if(x<2) return 0;
    	for(int i=2;i*i<=x;i++)
    	{
    		if(x%i==0)
    		{
    			return 0;
    		}
    	}
    			
    	return 1;
    }
    void dfs(int k)
    {
        if(k==r+1)
        {
        	int s=0;
            for(int i=1;i<=r;i++) s=s+b[a[i]];
            if(pd(s)==true) ans++;
        }
        else
        {
            for(int i=a[k-1]+1;i<=n;i++)
                if(v[i]==0)
                {
                    a[k]=i;
                    v[i]=1;
                    dfs(k+1);
                    a[k]=0;
                    v[i]=0;
                }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&r);
        for(int i=1;i<=n;i++) scanf("%d",&b[i]); 
        memset(v,0,sizeof(v));
        ans=0;a[0]=0;
        dfs(1);
        printf("%d\n",ans);
        return 0;
    }
    
    • 1

    *【递归】组合+判断素数(视频)

    信息

    ID
    47
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    543
    已通过
    123
    上传者