16分…… 感觉思路没错 但是样例不对
查看原帖
16分…… 感觉思路没错 但是样例不对
803133
CYF123469楼主2023/2/26 20:36
#include <bits/stdc++.h>
using namespace std ;
int n,k ;
int ans=0 ;
int judge ;
int cnt=0 ;
const int N=25 ;
int visit[N] ;
int a[N] ;
bool isPrime(int x)
{
	int t=x ;
	for(int i=2;i*i<=t;i++)
	{
		if(t%i==0) return false ;
	}
	return true ;
}
int dfs(int cnt)
{
	if(cnt-1==k) 
	{
		int judge=0 ;
		for(int i=0;i<n;i++)
		{
			if(visit[i]==1) judge+=a[i] ;
		}
		if(isPrime(judge)) ans++ ;
	}
	else 
	{
		for(int i=0;i<n;i++)
		{
			if(visit[i]==0)
			{
				visit[i]=1 ;
				dfs(cnt+1) ;
				visit[i]=0 ;
			}
		}
	}
	return ans ;
}
int main()
{
	scanf("%d %d",&n,&k) ;
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]) ;
	}
	memset(visit,0,sizeof(visit)) ;
	cout<<dfs(0)<<endl ;
	return 0 ;
}

大佬求助 谢谢

2023/2/26 20:36
加载中...