寄信人: Fll (沧海一声笑)
标 题: 素数问题
发信站: 郁金香BBS站 (2004年08月28日21:52:41 星期六)
来 源: 10.13.3.118
#include<stdio.h>
#include<string.h>
int n,a[22],m[22][22],used[22],num[22];
int prime(int k) //判断k是否是素数
{
int i;
for(i=2;i<k;i++)
if(k%i==0) return 0;
return 1;
}
int find(int k) //循环找出符合要求的序列
{
int i;
if(k==n&&prime(a[n-1]+1)){ //已经找到了n个则输出结果
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d/n",a[i]);
return 0;
}
if(k==n) return 0;
for(i=0;i<num[a[k-1]]&&m[a[k-1]][i]<=n;i++ )
if(used[m[a[k-1]][i]]==0){
a[k]=m[a[k-1]][i]; //a记录已经找到的序列
used[m[a[k-1]][i]]=1;
find(k+1);
used[m[a[k-1]][i]]=0;
}
return 0;
}
int main()
{
int i,j,k,loop=1;
while(scanf("%d",&n)!=EOF){
for(i=1;i<=20;i++){ //判断i能跟哪些数构成素数,并用m[i][k]来记录
k=0;
for(j=1;j<=20;j++)
if(prime(i+j)&&i!=j)
m[i][k++]=j;
num[i]=k; //记录数i可构成素数的个数