李光伦akacha_tw 发表于 2023-3-12 20:54:53

关于0至(2^(2n+1))-1的连续整数对偶幻方



自己发现的这个东西, 网上查了下"twined magic squares"及相关中文(中文网页信息污染太严重, 不是很容易查)没找到相关的.
不知道是不是还没有人发现过这东西?

-定义用语:
将0至(2^(2n+1))-1共2^(2n+1)个连续整数填入<两个>长宽2^n的方块格中,
且使方块格纵, 横, 对角线(及泛对角线?)相加皆等于幻和, 我称这两个方块格为<对偶幻方>.

计算幻和(javascript代码, 下同):
function oddsq_sum(level)
{
      return ((1<<level)-1)<<((level-2)-(level>>1));
}
e.g.
oddsq_sum(5) = 62, oddsq_sum(7) = 508.


令k=2n+1, k=5的这种幻方为:
0 30 29 3
27 5 6 24
7 25 26 4
28 2 1 31
----------
16 14 13 19
11 21 22 8
23 9 10 20
12 18 17 15
( 19+8+20+15 = 27+5+6+24 = 3+6+25+28 = 62 )

k=7的这种幻方为:
0 126 125 3      4 122 121 7
119 9 10 116      115 13 14 112
111 17 18 108      107 21 22 104
24 102 101 27      28 98 97 31

96 30 29 99      100 26 25 103
23 105 106 20      19 109 110 16
15 113 114 12      11 117 118 8
120 6 5 123      124 2 1 127
----------
64 62 61 67      68 58 57 71
55 73 74 52      51 77 78 48
47 81 82 44      43 85 86 40
88 38 37 91      92 34 33 95

32 94 93 35      36 90 89 39
87 41 42 84      83 45 46 80
79 49 50 76      75 53 54 72
56 70 69 59      60 66 65 63


-构造法(代码):
基于xor(基于xor的幻方构造法我也没在网上看到过类似的), 完整代码见附件mgsq.js.txt
另mkmgsq_even()是构造偶数2n阶的, 同样基于xor.

function mkmgsq_odd(level)
{
      var retsq0=uintsqarr_withp(level);
      var retsq1=uintsqarr_withp(level);
      allrg=1<<(level);
      sqrg=1<<(level-1);

      var lztidx=allrg-1;
      var hfallrg=allrg>>2;
      var odd_hf=level>>1;
      var i=0;
      
      for(var tk0=0;tk0<2;tk0++)
      {
                for(var tk1=0;tk1<hfallrg;tk1++){
                        var tztchg=(i^(i>>odd_hf));
                        tztchg = (tztchg^(tztchg>>1))&1;
                        var rvidx=lztidx-i;
                        if(tztchg == 1){
                              retsq0=rvidx;
                              retsq0=i;
                        } else {
                              retsq0=i;
                              retsq0=rvidx;
                        }
                        i++;}
                var tmp=retsq0;
                retsq0=retsq1;
                retsq1=tmp;
      }
      return ;
}
e.g. F12控制台输入:
printmgsq_by4(mkmgsq(5))

printmgsq_by4(mkmgsq(11))



-<对偶幻方>的性质:
称对偶幻方中的第一个为A, 第二个为B, 以k=5为例,
A与B的平均为:
8 22 21 11
19 13 14 16
15 17 18 12
20 10 9 23
(A+B)/2 = (0+16)/2 = 8
(A+B)/2 = (25+9)/2 = 17
.etc

可发现平均阵的1, 2, 3, 4行为B阵2, 1, 4, 3行的左右逆,
即平均阵为B阵的<分半逆旋>.

以个人经验, 这种<分半逆旋>在二进制xor运算图样中很常见.

将A的<分半逆旋>与B的<分半逆旋>取平均, 则又回到A与B.

-定性A与B:
周知, 令k=4, 在0至15这十六个数字中, 将有<全0>("全阴爻")与<全1>("全阳爻")的二进制数字各一个(0和15),
<一1三0>的数字四个(1, 2, 4, 8), <三1一0>的数字四个(7, 11, 14, 13),
其余六个二进制数字为<二1二0>, 即按照组合系数1-4-6-4-1来分组的.

我用颜色在一个右转45度的(非对偶)四阶幻方上标出这五组数字(<全0>与<全1>同为灰色), 得到:
https://klanly.github.io/ncnn/yinyang16.png
( 0+14+13+3 = 14+5+9+2 = 0+5+10+15 = 30 )

可发现这些数字组在幻方上的分布应该是看起来平衡的.

於是, 当k=5, 我同样在<对偶幻方>上标出1-5-10-10-5-1这六组:
https://klanly.github.io/ncnn/yinyang32.png

可见A与B虽各自看起来仍平衡, 但AB的图样却是不同的, A较B的图样, 更为接近偶数的非对偶幻方.

於是, 我称A阵为"本根", B阵为"派生".
这样的定性与我另外一个发现相关: 属A组的数与属B组的数在<16宫派生32宫>(即(2^4)^2派生(2^5)^2; 256各生四, 派生1024)上的图样及作用是不同的,https://klanly.github.io/ncnn/zpal6n9_every4xmpp.png
https://klanly.github.io/ncnn/lv5shi1xmpp.png
这另一个发现还待整理.
页: [1]
查看完整版本: 关于0至(2^(2n+1))-1的连续整数对偶幻方