这个题目主要利用的是递归搜索,从1开始搜索,不断的试探下一个数。
C++代码:
#include<stdio.h>
#include<math.h>
const int N=20;
int arr[N];
bool mark[N];
bool isPrime(int n){
int k=(int)sqrt(double(n));
for(int i=2;i<=k;i++){
if(n%i==0)
return false;
}
return true;
}
int n;
void recursive(int cur){
if(cur==n&&isPrime(arr[0]+arr[n-1])){
for(int i=0;i<n;i++){
if(i)
printf(" ");
printf("%d",arr[i]);
}
printf("\n");
}
else{
for(int i=2;i<=n;i++){
if(mark[i]==false&&isPrime(i+arr[cur-1])){
arr[cur]=i;
mark[i]=true;
recursive(cur+1);
mark[i]=false;
}
}
}
}
int main(){
int icase=0;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<N;i++)
mark[i]=false;
arr[0]=1;mark[0]=true;
printf("Case %d:\n",++icase);
recursive(1);
printf("\n");
}
return 0;
}
本文详细介绍了使用递归搜索方法在C++中检测质数的过程,通过不断试探下一个数来筛选质数,展示了算法的实现细节与优化策略。
397

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



