#include<bits/stdc++.h>usingnamespace std;int a[100];int x,y,sum=0,s;//判断素数intsu(int s){if(s<=3)return s>=2;for(int n=2;n*n<s;n++){if(s%n==0)return0;}return1;}voiddfs(int n,int m,int s){// n 数组下标 m 选择数的个数 s 累加和if(n==x+1){//到数组尾部 判断是否符合要求if(m!=y)return;//选择的数够不够if(su(s)==0)return;//和是否为素数
sum++;return;}//选择这个数dfs(n+1,m+1,s+a[n]);//不选择这个数dfs(n+1,m,s);}intmain(){
cin >> x >> y;for(int i=1;i<=x;i++){
cin >> a[i];}dfs(1,0,0);
cout <<sum;return0;}
3.遍历图
#include<bits/stdc++.h>usingnamespace std;constint maxn =105;
vector<int> e[maxn];int bk[maxn];// 某个点是否被访问// 任务:输出所有可能的简单路径(不含环)
vector<int> way;// 记录当前的访问路径voiddfs(int u/*现在在哪个点*/){
bk[u]=1;// 该点已经被访问过了
way.push_back(u);bool ok =false;for(auto v : e[u]){if(bk[v]==1)continue;dfs(v);
ok =true;}// 无路可走if(ok ==false){for(auto g : way)
cout << g <<" ";
cout << endl;}
bk[u]=0;// 返回之前,将改点置为0
way.pop_back();return;}intmain(){int n , m; cin >> n >> m;for(int i =1; i <= m ; i++){int x , y; cin >> x >> y;
e[x].push_back(y);
e[y].push_back(x);}dfs(1);return0;}