三阶幻方之暴力穷举..问题
程序代码:
#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; }