| Type: | Package |
| Title: | A Generalization of Yang Hui's Magic Squares |
| Version: | 1.1 |
| Description: | The generalized construction methods for magic squares, inspired by the ancient Chinese mathematician Yang Hui's classical work "Xu Gu Zhai Qi Suan Fa". These methods can construct 4n-order magic squares and 2(2n+1)-order magic squares. |
| License: | GPL-3 |
| Encoding: | UTF-8 |
| RoxygenNote: | 7.3.2 |
| NeedsCompilation: | no |
| Packaged: | 2026-03-18 16:19:27 UTC; niech |
| Author: | Chun-Xiao Nie |
| Maintainer: | Chun-Xiao Nie <niechunxiao2009@163.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-03-23 10:00:22 UTC |
Construct singly even order magic square (Yang-Hui Conway generalization)
Description
Construct singly even order magic square (Yang-Hui Conway generalization)
Usage
YangConway(m, d_type = "square", template_set = 2)
Arguments
m |
Positive integer, final order n = 2*(2*m+1) |
d_type |
Type of common difference: "unit" (d=1) or "square" (d=(2m+1)^2) |
template_set |
Template series: 1~4 corresponding to matrices 4,7,9,10 in the paper |
Value
n x n magic square
Examples
# Example 1: Reproduce Yang-Hui 6th order magic square (Yang diagram),
# m=1, d_type="square", template_set=2
cat("===== Yang-Hui 6th order magic square (Yang diagram) =====\n")
yanghui6 <- YangConway(m = 1, d_type = "square", template_set = 2)
print(yanghui6)
cat("Is it a magic square: ", is_magic_square(yanghui6), "\n\n")
# Example 2: Construct 10th order magic square (matrix 8 in the paper),
# m=2, d_type="square", template_set=2
cat("===== 10th order magic square (Yang-Hui method, template 7) =====\n")
yanghui10 <- YangConway(m = 2, d_type = "square", template_set = 2)
print(yanghui10)
cat("Is it a magic square: ", is_magic_square(yanghui10), "\n\n")
# Example 3: Use common difference 1 (LUX method) to construct 10th order magic square, template 4
cat("===== 10th order magic square (LUX method, template 4) =====\n")
lux10 <- YangConway(m = 2, d_type = "unit", template_set = 1)
print(lux10)
cat("Is it a magic square: ", is_magic_square(lux10), "\n\n")
Construct doubly even order magic square (Yang-Hui · Dürer · Ramanujan inspired)
Description
Construct doubly even order magic square (Yang-Hui · Dürer · Ramanujan inspired)
Usage
YangRamanujan(n, params = "natural", L1 = NULL, L2 = NULL)
Arguments
n |
Positive integer, order = 4n |
params |
Parameter setting. Can be a list containing a11, d1, d2, d12, d21 (d22 is optional, automatically set to d12+d21). Predefined strings: - "natural": natural square parameters (a11=1, d1=1, d2=4n, d12=2n, d21=2n*4n) - "type1" : second row of Table 3 (a11=1, d1=1, d2=2n, d12=(2n)^2, d21=2*(2n)^2) - "type2" : third row of Table 3 (a11=1, d1=4n, d2=1, d12=?, d21=?, d22=?) [values incomplete, for illustration only] |
L1 |
Sets of rows/columns to flip (1‑based), default automatically generated symmetric sets |
L2 |
Sets of rows/columns to flip (1‑based), default automatically generated symmetric sets |
Value
4n x 4n magic square matrix
Examples
# Example 1: Ramanujan's 8th order magic square (matrix 4 in the paper)
# Using natural square parameters, L1 = L2 = {2,3,6,7}
cat("\n===== Ramanujan's 8th order magic square =====\n")
ramanujan8 <- YangRamanujan(n = 2,params = "natural",L1 = c(2, 3, 6, 7),L2 = c(2, 3, 6, 7))
print(ramanujan8)
cat("Is it a magic square: ", is_magic_square(ramanujan8), "\n")
# Example 2: One of Yang-Hui's 4th order magic squares (matrix 2 in the paper)
# For n=1, use natural square, L1 = L2 = {2,3} (rows/columns 1..4 for order 4)
cat("\n===== Yang-Hui 4th order magic square (matrix 2) =====\n")
yanghui4 <- YangRamanujan(n = 1, params = "natural",L1 = c(2, 3),L2 = c(2, 3))
print(yanghui4)
cat("Is it a magic square: ", is_magic_square(yanghui4), "\n")
# Example 3: Dürer's 4th order magic square (matrix 3 in the paper)
# According to Table 1, use specific parameters (n=1) and L1 = L2 = {2,3}
# Parameters from row (22) in Table 1: a11=1, d1=-1, d2=-8, d12=-2, d21=-4, d22=-6
cat("\n===== Dürer's 4th order magic square (matrix 3) =====\n")
duerer_params <- list(a11 = 1, d1 = 1, d2 = 8, d12 = 2, d21 = 4)
duerer4 <- YangRamanujan(n = 1,params = duerer_params,L1 = c(2, 3),L2 = c(2, 3))
print(duerer4)
cat("Is it a magic square: ", is_magic_square(duerer4), "\n")
# Example 4: Custom 12th order magic square (n=3), using natural square, default symmetric L
cat("\n===== Custom 12th order magic square (natural square, default L) =====\n")
magic12 <- YangRamanujan(n = 3, params = "natural")
# Print only first 6 rows to save space
print(magic12)
cat("Is it a magic square: ", is_magic_square(magic12), "\n")
Construct the initial matrix M (satisfying the form of Matrix (8))
Description
Construct the initial matrix M (satisfying the form of Matrix (8))
Usage
construct_M(n, a11, d1, d2, d12, d21, d22)
Arguments
n |
Parameter, final order is 4n |
a11 |
Parameters from the lemma, must satisfy d12 + d21 = d22 |
d1 |
Parameters from the lemma, must satisfy d12 + d21 = d22 |
d2 |
Parameters from the lemma, must satisfy d12 + d21 = d22 |
d12 |
Parameters from the lemma, must satisfy d12 + d21 = d22 |
d21 |
Parameters from the lemma, must satisfy d12 + d21 = d22 |
d22 |
Parameters from the lemma, must satisfy d12 + d21 = d22 |
Value
4n x 4n matrix
Generate the 2n x 2n A11 matrix (arithmetic progression form)
Description
Generate the 2n x 2n A11 matrix (arithmetic progression form)
Usage
generate_A11(n, a11, d1, d2)
Arguments
n |
Parameter, final order is 4n |
a11 |
Upper-left corner starting value |
d1 |
Column direction common difference (horizontal increment) |
d2 |
Row direction common difference (vertical increment) |
Value
2n x 2n matrix
Generate a symmetric L set satisfying the condition (first n numbers and their complements)
Description
Generate a symmetric L set satisfying the condition (first n numbers and their complements)
Usage
generate_symmetric_L(n)
Arguments
n |
Parameter, final order 4n |
Value
Integer vector of length 2n
Verify magic square properties
Description
Verify magic square properties
Usage
is_magic_square(M)
Arguments
M |
Square matrix |
Value
TRUE if M satisfies the magic square condition
Examples
M=YangConway(m = 2, d_type = "unit", template_set = 1)
is_magic_square(M)
Construct odd order magic square (Siamese method)
Description
Construct odd order magic square (Siamese method)
Usage
odd_magic_square(k)
Arguments
k |
Odd order number |
Value
k x k magic square with numbers 1 to k^2
Examples
odd_magic_square(7)
Apply row left-right flips and column up-down flips to a matrix
Description
Apply row left-right flips and column up-down flips to a matrix
Usage
transform_M(M, L1, L2)
Arguments
M |
Initial matrix |
L1 |
Vector of row indices (1‑based) to be left-right flipped |
L2 |
Vector of column indices (1‑based) to be up-down flipped |
Value
Transformed matrix