专栏文章

题解:P1036 [NOIP 2002 普及组] 选数

P1036题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miq5808x
此快照首次捕获于
2025/12/03 23:09
3 个月前
此快照最后确认于
2025/12/03 23:09
3 个月前
查看原文

[NOIP 2002 普及组] 选数

题目传送门

思路:

用深搜枚举所有合法是组合,统计结果是素数的个数,最后输出。

Coding:

CPP
#include <bits/stdc++.h>
using namespace std;
int n;
int a[21];
int k;
int num;
void dfs(int now,int id,int ans)
{
	if(now==k+1) //满足条件 
	{
		bool f=true;
		for(int i=2;i*i<=ans;i++)
			if(ans%i==0)
			{
				f=false;
				break;
			}
		if(f==true) //判断是否是素数 
			num++;
	}
	else if(id<=n)
		for(int i=id;i<=n;i++)
			dfs(now+1,i+1,ans+a[i]); //搜索所有组合 
}
int main( ){
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	dfs(1,1,0);
	cout<<num; //输出方案数 
	return 0;
} 

评论

1 条评论,欢迎与作者交流。

正在加载评论...