求素?cái)?shù)環(huán)c++代碼(越簡(jiǎn)單越好)
原題:
素?cái)?shù)環(huán):從1到n這n個(gè)數(shù)擺成一個(gè)環(huán),要求相鄰的兩個(gè)數(shù)的和是一個(gè)素?cái)?shù),。如,,n=8是,,素?cái)?shù)環(huán)為:
1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2
總數(shù)為4
這個(gè)算法是生成1~N的素?cái)?shù)環(huán),相鄰數(shù)字之間史蒂文和必須為素?cái)?shù),。注意保證首位之間的和也應(yīng)該是素?cái)?shù),。
#include<iostream>#include<cmath>#define size 101int a[size]={0};int n;int tot=0;int visited[size]={0};using namespace std;int is_su(int i){int d=1;for(int j=2;j*j<=i;j++){//判斷i是否為素?cái)?shù),注意,,在算法中,,j*j的計(jì)算比求平方速度更加快,不信的話可以自己試試if(i%j==0) {d=0;break;}}return d;}void dfs(int cur){a[0]=1;//必須設(shè)定這個(gè)的初值,,不然最后的結(jié)果會(huì)有問(wèn)題if(cur==n&&is_su(a[0]+a[n-1])){tot++;cout<<1<<" ";for(int i=1;i<n;i++)cout<<a[i]<<" ";cout<<endl;cout<<"---------------";cout<<endl;}elsefor(int i=2;i<=n;i++){//此處必須從數(shù)字2開(kāi)始,,不然也會(huì)出現(xiàn)問(wèn)題if(!visited[i]&&is_su(i+a[cur-1])){visited[i]=1;a[cur]=i;dfs(cur+1);visited[i]=0;}}}int main(){cin>>n;dfs(1);cout<<tot;system("pause");return 0;}
希望能幫到你
少時(shí)誦詩(shī)書(shū)+
所所所所所所所所所
Tags:素?cái)?shù)越好代碼