三阶素数幻方
程序代码:#include<stdio.h>
int isprime(int i);
int main()
{
int i,n,m,j,a[305],x1,x2,x3,x4,x5,x6,x7,x8,x9,cha_1,cha_2,sum;
scanf("%d,%d",&m,&n);
j=0;
for(i=m;i<=n;i++)
{
if(isprime(i))
{
a[j]=i;j++;
}
}
if(j<=10) printf("0");
else
{
sum=0;
for(x1=0;x1<j-8;x1++)
{
for(x2=x1+1;x2<j-7;x2++)
{
cha_1=a[x2]-a[x1];
for(x3=x2+1;x3<j-6;x3++)
{
if(a[x3]-a[x2]<cha_1) continue;
if(a[x3]-a[x2]>cha_1) break;
for(x4=x3+1;x4<j-5;x4++)
{
cha_2=a[x4]-a[x3];
for(x5=x4+1;x5<j-4;x5++)
{
if(a[x5]-a[x4]<cha_1) continue;
if(a[x5]-a[x4]>cha_1) break;
for(x6=x5+1;x6<j-3;x6++)
{
if(a[x6]-a[x5]<cha_1) continue;
if(a[x6]-a[x5]>cha_1) break;
for(x7=x6+1;x7<j-2;x7++)
{
if(a[x7]-a[x6]<cha_2) continue;
if(a[x7]-a[x6]>cha_2) break;
for(x8=x7+1;x8<j-1;x8++)
{
if(a[x8]-a[x7]<cha_1) continue;
if(a[x8]-a[x7]>cha_1) break;
for(x9=x8+1;x9<j;x9++)
{
if(a[x9]-a[x8]<cha_1) continue;
else if(a[x9]-a[x8]>cha_1) break;
else sum++;
}
}
}
}
}
}
}
}
}
printf("%d",sum);
}
return 0;
}
int isprime(int i)
{
int ok,t;
for(t=2;t<=i/2;t++)
{
if(i%t==0)
{
ok=0;
break;
}
else
ok=1;
}
return ok;
}#include<stdio.h>
int isprime(int i);
int main()
{
int i,n,m,j,a[305];
scanf("%d,%d",&m,&n);
j=0;
for(i=m;i<=n;i++)
{
if(isprime(i))
{
a[j]=i;
j++;
}
}
}
int isprime(int i)
{
int ok,t;
for(t=2;t<=i/2;t++)
{
if(i%t==0)
{
ok=0;
break;
}
else
ok=1;
}
return ok;
}问题是:在闭区间a到b中找出九个素数,使它们构成3*3方阵(三行三列与两对角线上的三个数字和均相等)。
我的思路是:将九个数(x1,x2,x3,x4,x5,x6,x7,x8,x9)从小到大排(找素数的时候排好了),发现(x2-x1=x3-x2=x5-x4=x6-x5=x8-x7=x9-x8)并且(x4-x3=x7-x6)所以用了九个循环,但是根据示例,50到500的闭区间应该有八个这样的方阵,我程序只算出来七个,这是什么问题?求解答!!!(注:100到400之间有两个这样的方阵,这是对的)。







