将1,2,3,。。。。。。,20排成一圈,使任意两相邻数之和均为素数
#include <stdio.h>
#include <math.h>int main()
{
int i;
int j = 0;
int k = 0;
int m;
int n;
int a [ 20 ];
int b [ 10 ];
int c [ 10 ];
for( i = 1; i <= 20; i ++)
{
if(i%2 == 0)
{
k = j;
b [ k ] = i;
j++;
printf("b [%d]=%d\n",k,b[k]);
}
else
{
c [ j ] = i;
printf("c [%d]=%d\n",j,c[j]);
}
}
for( m = 0; m<10; m++)
{
for( n = 0; n<10; n++)
{
a [ m ] = c [ m ]+b [ n ];
if(prime(a [ m ]) && a [ m ]<40)
{
printf("%d %d ",c [ m ],b [ n ]);
b [ n ] = 40;
c [ m ] = 40;
break;
}
}
}
}
prime (int i)
{
int j;
if( i == 2) return 1;
if( i%2 == 0) return 0;
for( j = 3; j <= (int)sqrt((double)i)+1; j += 2)
{
if( i%j == 0)
return 0;
}
return 1;
}
按照题意,将1-20分为了偶数和奇数两个数组,因为素数除二以外一定是素数,所以采用偶数数组加奇数数组,得到新的数组求其是否为素数,但求出的数始终有合数存在。
在分奇偶数组时应注意其数组。
结果:1 2 3 4 5 6 7 10 9 8 11 12 13 16 15 14 17 20 19 18