69,373
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
// 40以内的素数表
int Prime[] = {2,3,5,7,11,13,17,19,23,29,31,37};
// 函数IsPrime,判断一个数是否为素数,若是,返回1,否则返回0
int IsPrime(int n)
{
int low = 0;
int high = 12; // 40以内的素数共12个
while( low <= high )
{
if( Prime[low] == n )
return 1;
else low++;
}
return 0;
}
int a[20];
int used[20] = {0};
void Solve(int start)
{
int i;
if( start == 20 )
{
if( !IsPrime(a[0]+a[19]) )
return;
for(i=0; i<20; ++i)
printf("%4d",a[i]);
return;
}
for(i=0; i<20; ++i)
{
if( used[i] )
continue;
if( start!=0 && !IsPrime(a[start-1]+i+1) )
continue;
used[i] = 1;
a[start] = i+1;
Solve(start+1);
used[i] = 0;
}
}
int main(void)
{
Solve(0);
}