#include<iostream>
using namespace std;
bool isprime(int);
void backtrack(int);
bool check(int);
int n;
int tu[21];
int main()
{
int count=0;
while(cin>>n)
{
count++;
tu[1]=1;
cout<<"Case "<<count<<":"<<endl;
backtrack(2);
cout<<endl;
}
return 0;
}
bool isprime(int n)
{
for(int i=2;i<=n/2;i++)
{
if(n%i==0)
return false;
}
return true;
}
bool check(int t)
{
for(int i=1;i<t;i++)
{
if(tu[i]==tu[t])
return false;
}
return true;
}
void backtrack(int t)
{
if(t>n)
{
if(isprime(tu[n]+tu[1])&&check(n))
{
for(int i=1;i<=n;i++)
{
cout<<tu[i]<<(i<n?' ':'\n');
}
}
}
else
{
for(int i=2;i<=n;i++)
{
tu[t]=i;
if(isprime(tu[t]+tu[t-1])&&check(t))
backtrack(t+1);
}
}
}
hdu 1016 Prime Ring Problem
最新推荐文章于 2021-06-01 18:39:59 发布