4、算法: 开始 找出全部四位的可逆素数; 确定全部出现在第一和最后一行的四位可逆素数; 在指定范围内穷举第一行 在指定范围内穷举第二行 若第一、第二、三行已出现矛盾,则继续穷举下一个数; 在指定范围内穷举第四行 判断列和对角方向是否符合题意 若符合题意,则输出矩阵; 否则继续穷举下一个数; 结束 在实际编程中,采用了很多程序设计技巧,假如设置若干辅助数组,其目的就是要最大限度的提高程序的执行效率,缩短运行时间。下面的程序运行效率是比较高的。 *程序说明与注释 #include #include int number
5、[210][5]; /*存放可逆素数及素数分解后的各位数字*/ int select[110]; /*可以放在矩阵第一行和最后一行的素数的下标*/ int array[4][5]; /*4X4的矩阵,每行0号元素存可逆素数对应的数组下标*/ int count; /*可逆素数的数目*/ int selecount; /*可以放在矩阵第一行和最后一行的可逆素数的数目*/ int larray[2][200]; /*存放素数前二、三位数的临时数组所对应的数量计数器*/ int lcount[2]; int num(int
6、number); int ok(int number); void process(int i); void copy_num(int i); int comp_num(int n); int find1(int i); int find2(void); int find0(int num); void p_array(void); int main() { int i,k,flag,cc=0,i1,i4; printf("there are magic squares with invertabl