素数环,DFS能算到14就差不多了。。
#include <iostream>
#include <iostream>
#include <cmath>
using namespace std;
int is_prime(int n)
{
int ok=1;
if(n==1||n==0) return 0;
if(n==2) return 1;
int m=sqrt(n)+1;
for(int i=2;i<=m;i++)
{
if(n%i==0)
{
ok=0;
break;
}
}
if(ok) return 1;
}
void dfs(int* c,int cur,int* vis,int* isp,int n)
{
if(cur==n+1&&isp[c[1]+c[n]])
{
for(int i=1;i<=n;i++)
{
if(i!=n)
cout<<c<<" ";
else if(i==n)
cout<<c;
}
cout<<endl;
}
else for(int i=2;i<=n;i++)
{
c[cur]=i;
if(!vis&&isp[c[cur-1]+i])
{
vis=1;
dfs(c,cur+1,vis,isp,n);
vis=0;
}
}
}
int main()
{
int isp[100]={0};
for(int i=1;i<100;i++)
{
if(is_prime(i)) isp=1;
}
int n;
int static tot=0;
while(cin>>n)
{
int vis[30]={0};
int c[30]={-1,1};
cout<<"Case "<<++tot<<":"<<endl;
dfs(c,2,vis,isp,n);
}
return 0;
}
能AC的:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void is_prime(int* isp)
{
for(int i=2;i<=10;i++)
{
if(i==0) continue;
else
for(int j=i+1;j<100;j++)
{
if(j%i==0)
{
isp[j]=0;
}
}
}
}
{
for(int i=2;i<=10;i++)
{
if(i==0) continue;
else
for(int j=i+1;j<100;j++)
{
if(j%i==0)
{
isp[j]=0;
}
}
}
}
void search(int cur,int*a,int* vis,int* isp,int n)
{
if(cur==n+1)
{
if(isp[a[n]+a[1]])
{
for(int i=1;i<=n;i++)
{
if(i!=n)
cout<<a<<" ";
if(i==n)
cout<<a;
}
cout<<endl;
}
}
else
{
for(int i=2;i<=n;i++)
{
a[cur]=i;
if(vis==0&&isp[a[cur-1]+i])
{
vis=1;
search(cur+1,a,vis,isp,n);
vis=0;
}
}
}
}
{
if(cur==n+1)
{
if(isp[a[n]+a[1]])
{
for(int i=1;i<=n;i++)
{
if(i!=n)
cout<<a
if(i==n)
cout<<a
}
cout<<endl;
}
}
else
{
for(int i=2;i<=n;i++)
{
a[cur]=i;
if(vis
{
vis
search(cur+1,a,vis,isp,n);
vis
}
}
}
}
int main()
{
int a[25];
int isp[100];
memset(isp,-1,sizeof(isp));
isp[0]=isp[1]=0;
is_prime(isp);
{
int a[25];
int isp[100];
memset(isp,-1,sizeof(isp));
isp[0]=isp[1]=0;
is_prime(isp);
int n; int tot=0;
while(scanf("%d",&n)!=EOF)
{
cout<<"Case "<<++tot<<":"<<endl;
int vis[25]={0};
a[1]=1;
search(2,a,vis,isp,n);
cout<<endl;
}
return 0;
}
结尾换行,没有空格!
while(scanf("%d",&n)!=EOF)
{
cout<<"Case "<<++tot<<":"<<endl;
int vis[25]={0};
a[1]=1;
search(2,a,vis,isp,n);
cout<<endl;
}
return 0;
}
结尾换行,没有空格!