三阶幻方之暴力穷举..问题
程序代码:#include<stdio.h>
#include<string.h>
#include<math.h>
#include<malloc.h>
int prime(int sum){
int i,j,k=1;
i=(int)sqrt(sum);
for(j=2;j<=i;j++){
if((sum%j)==0){
k=0;
break;
}
}
return k;
} /*这个函数判断素数*/
int main()
{
int a[500],m,n,i,j,k,flag=0,x1,x3,x4,x5,x6,fin,ss=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++){
if(prime(i)){
a[flag]=i;
flag++;
}
} /*将输入数据之间所有的素数赋值到数组中*/
for(i=0;i<flag;i++){
x5=a[i];fin=3*x5; /*第一步确定中间的数字,因为中间的数字是幻方各行数字的三倍*/
for(j=0;j<flag;j++){
x1=a[j]; /*将幻方左上角的数字确定*/
for(k=0;k<flag;k++){
x3=a[k]; /*将幻方右上角的数字确定*/
if(prime(fin-x5-x1)){ /*素数幻方,判断右下角的数字是否为素数*/
x6=fin-x5-x1;
if(prime(fin-x5-x3)){ /*判断左下角的数字是否为素数*/
x4=fin-x5-x3;
if(x1!=x3&&x1!=x4&&x1!=x5&&x1!=x6){ /*用层层条件判断!!!*/
if(x3!=x4&&x3!=x5&&x3!=x6){
if(x4!=x5&&x4!=x6){
if(x5!=x6){
if((prime(fin-x1-x4))&&(prime(fin-x1-x3))&&
(prime(fin-x4-x6))&&(prime(fin-x3-x6))){ /*这一步是判断上下左右的数字是否为素数*/
ss+=1;
}
}
}
}
}
}
}
}
}
}
printf("%d",ss);
return 0;
}


,自己修改了一下终于AC了,可是很暴力,把修改的代码贴上去,望高手勿喷,求指教...