素数幻方 求四阶的素数幻方。即在一个4*4的矩阵中,每一个格填入一个数字,使每一行、每一列和两条对角线上的四个数字所组成的四位数,均为可逆素数(改数逆序后仍是素数)。 提示:这样的矩阵有很多。 **输出提示信息:"There are magic aquares with invertable primes as follow:\n" **输出格式要求:"No.%d\n" "%6d" 程序运行示例如下: There are magic aquares with invertable primes as follow: No.1 1 1 9 3 1 0 0 9 9 2 2 1 3 1 9 1 No.2 1 1 9 3 1 0 2 1 9 0 2 9 3 9 1 1 C语言
时间: 2023-12-29 13:06:06 浏览: 170
以下是C语言代码实现:
```c
#include <stdio.h>
int isPrime(int n) {
if (n < 2) return 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
int isReversiblePrime(int n) {
int m = 0, p = n;
while (p) {
m = m * 10 + p % 10;
p /= 10;
}
return isPrime(m) && isPrime(n);
}
void printMagicSquare(int a[4][4], int *cnt) {
printf("No.%d\n", *cnt);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
printf("%6d", a[i][j]);
}
printf("\n");
}
printf("\n");
(*cnt)++;
}
void generateMagicSquares(int a[4][4], int row, int col, int *cnt) {
if (row == 4 && col == 0) { // 递归结束条件
int nums[8];
nums[0] = a[0][0] * 1000 + a[0][1] * 100 + a[0][2] * 10 + a[0][3];
nums[1] = a[1][0] * 1000 + a[1][1] * 100 + a[1][2] * 10 + a[1][3];
nums[2] = a[2][0] * 1000 + a[2][1] * 100 + a[2][2] * 10 + a[2][3];
nums[3] = a[3][0] * 1000 + a[3][1] * 100 + a[3][2] * 10 + a[3][3];
nums[4] = a[0][0] * 1000 + a[1][0] * 100 + a[2][0] * 10 + a[3][0];
nums[5] = a[0][1] * 1000 + a[1][1] * 100 + a[2][1] * 10 + a[3][1];
nums[6] = a[0][2] * 1000 + a[1][2] * 100 + a[2][2] * 10 + a[3][2];
nums[7] = a[0][3] * 1000 + a[1][3] * 100 + a[2][3] * 10 + a[3][3];
for (int i = 0; i < 8; i++) {
if (!isReversiblePrime(nums[i])) return;
}
printMagicSquare(a, cnt);
return;
}
int nextRow = row, nextCol = col + 1;
if (nextCol == 4) {
nextRow++;
nextCol = 0;
}
for (int i = 1; i <= 16; i++) {
a[row][col] = i;
generateMagicSquares(a, nextRow, nextCol, cnt);
}
}
int main() {
int a[4][4];
int cnt = 1;
printf("There are magic aquares with invertable primes as follow:\n");
generateMagicSquares(a, 0, 0, &cnt);
return 0;
}
```
代码中用到了 `isPrime` 判断素数,`isReversiblePrime` 判断可逆素数,`printMagicSquare` 打印矩阵,`generateMagicSquares` 递归生成矩阵。输出格式要求使用了 `%6d` 对齐输出。
阅读全文