三阶素数幻方输出少一组???
通常的n阶幻方由1,2,3,4,...,n^2填入构成。而素数幻方全是由素数构成的各行、各列与两对角线之和均相等的方阵。试在一般区间[c,d]找出9个素数,构成一个三阶素数幻方,使得该方阵中3行、3列与两对角线上的3个数之和均相等。最后统计出素数幻方的个数。注意,一个素数幻方转置后仍就是素数幻方,但不再计入总数。
例如,c=100,d=400, 那么区间[100,400]内的素数幻方共有2个,分别是:
No.1:
137 353 191
281 227 173
263 101 317
No.2:
173 359 257
347 263 179
269 167 353
#include<stdio.h>
#include<math.h>
int sushu(int n)
{
int i=2,s=1;
for(;i<sqrt(n)+0.5;i++)
if(n%i==0){
s=0;
break;
}
return s;
}
int main()
{
int m,n,k,i,j=0,su[500],dai[500],l=0,sum=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
if(sushu(i)==1) su[j++]=i;
for(i=4;i<j-5;i++)
{
for(k=0;k<i;k++)
if(sushu(2*su[i]-su[k])==1 && 2*su[i]-su[k]<=n) dai[l++]=su[k];
if(l>=4) sum+=chuli(dai,l,su[k]);
l=0;
}
printf("%d",sum);
return 0;
}
int chuli(int dai[],int l,int p)
{
int g,h,i,j,k,s=0;
for(g=0;g<l-3;g++)
for(h=g+1;h<l-2;h++)
for(i=h+1;i<l-1;i++)
for(j=i+1;j<l;j++)
if(dai[h]-dai[g]+dai[j]==p && dai[j]+dai[i]-dai[h]==p && 2*p-dai[i]+2*p-dai[j]+dai[h]==3*p) s++;
return s;
}
输入100 400是正确的,但输入50 500 只有7组,正确答案应该是8
help!!!!