1 条题解
-
0
C++ :
#include<iostream> #include<cmath> using namespace std; int n; int a[21];//用于存放素数环数字 bool b[21];//用其下标代表素数环中的数字,其存放内容代表改数字是否可用 int total=0;//代表素数环个数 bool pd(int x,int y);//判断x+y是否为素数 void search(int t);//第归判断1-n是否满足条件 void print();//打印满足条件的素数环 int main(){ cin>>n; for(int i=1;i<=n;i++) b[i]=true; //a[0]=1;//保证a[1]的第一位可以放1 //从1开始搜索 search(1); //打印出素数环个数 cout<<"total:"<<total; } //第归判断1-n是否满足条件 //这里的t代表素数环中第几个 void search(int t){ //遍历1-n个数字 for(int i=1;i<=n;i++){ //如果第i个数字与他上一个数字(放入环中的数字)相加是素数i+a[t-1] //并且该数字没有使用过b[i]=true if(pd(a[t-1],i) && b[i]==true){ a[t]=i;//存放进素数环 b[i]=false;//标记该数已经被使用过了 //n个数全部遍历结算 if(t==n &&pd(a[1],a[n])){ //判断头尾相加是否是素数 //打印素数环 print(); } search(t+1);//查找下一个 b[i]=true;//不满足条件的情况下把这个i给放出来 } } } //判断x+y是否为素数 bool pd(int x,int y){ int n; bool f; if(x==0){ return true; } //假设是素数 f=true; n=x+y; for(int i=2;i<=sqrt(n);i++){ if(n%i==0){ f=false;//不是素数 break;//跳出循环 } } //0,1 不是素数,2是素数 if(f==false || n==0 || n==1){ return false; } else { return true; } } //打印满足条件的素数环 void print(){ total=total+1;//素数环个数加1 cout<<total<<":"; for(int i=1;i<=n;i++){ cout<<a[i]<<" "; } cout<<endl; }
- 1
信息
- ID
- 2278
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者