http://acm.hdu.edu.cn/showproblem.php?pid=1016
#include <bits/stdc++.h>
using namespace std;
int n;
int vis[100],a[100];
bool isPrime(int x){
if(x==1) return false;
if(x==2) return true;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
int kk=0;
void dfs(int k){
//if(k>n) return;
if(k==n){
if(isPrime(a[n]+1)){
for(int i=1;i<n;i++)
cout<<a[i]<<' ';
cout<<a[n]<<endl;
}
return;
}
for(int i=2;i<=n;i++){
if(isPrime(a[k]+i)&&!vis[i]){
a[k+1]=i;
vis[i]=1;
dfs(k+1);
vis[i]=0;
}
}
}
int main(){
while(cin>>n){
memset(vis,0,sizeof(0));
memset(a,0,sizeof(0));
vis[1]=1;
a[1]=1;
cout<<"Case "<<++kk<<":"<<endl;
dfs(1);
cout<<endl;
}
}
本文介绍了一种使用深度优先搜索(DFS)算法生成满足特定条件的素数序列的方法。通过递归调用和素数判断函数,算法能够在给定范围内找出所有符合条件的素数序列,其中序列中任意两个相邻元素之和也必须为素数。
1万+

被折叠的 条评论
为什么被折叠?



