69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
int
is_prime(int n)
{
int nret = 1;
int i, j;
if (n < 2)
return 0;
j = n / 2;
for (i = 2; i <= j; ++i)
{
if (n % i == 0)
return 0;
}
return nret;
}
int
match(int *ar, int n)
{
int nret = 1;
int i, j;
for (i = 0; i < n - 1; ++i)
{
for (j = i + 1; j < n; ++j)
{
if (0 == is_prime(ar[i] + ar[j]))
return 0;
}
}
return nret;
}
int
main(void)
{
int i, j, k, n;
int nResult = 0;
int nCur = 0;
int *aResult = NULL;
while(printf("please input n:"), scanf("%d", &n))
{
if (n < 10)
continue;
aResult = (int *)malloc(9 * sizeof(int));
k = 0;
while (k++ < n - 9)
{
i = k - 1;
memset(aResult, 0, 9 * sizeof(int));
nCur = 0;
while (i <= n)
{
aResult[nCur] = ++i;
if (nCur > 1 && 0 == match(aResult, nCur))
aResult[nCur] = ++i;
else
if (++nCur == 8)
{
++nResult;
break;
}
}
if (nCur == 8)
{
printf("Result No.%2d\n", nResult);
for (j = 0; j < 9; ++j)
{
printf("%4d", aResult[j]);
if (j % 3 == 2)
printf("\n");
}
}
}
printf("Results count:%4d\n", nResult);
if (0 == nResult)
printf("No result matched.\n");
free(aResult);
}
return 0;
}