偶阶幻方的算术构造

2024-02-08 02:10
文章标签 构造 算术 幻方 偶阶

本文主要是介绍偶阶幻方的算术构造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文介绍的任意偶阶幻方的构造方法,无需考虑单偶、双偶,也不需要高等数学基础。与许多其他方法比较,或有新意。仅有初等数学基础,就可方便构造。

——求质疑!

一、构造方法

本法构造的幻方,先根据几条通项公式,求得坐标轴上的1至n²自然数列中的部分数后,再依据本法的排列规则,可简便填充该数列其余所有的数字。

先把给定数列最小和最大的8个数,建立一个4阶幻方,作为任意n阶幻方的中心。以该4阶幻方为中心,建立两条平行的横坐标轴B、C轴,再在两条对角线位置建立两条斜坐标轴A、D轴(图一,坐标上的点,用格子代替,以便填数)在这里插入图片描述

通过如下坐标轴通项公式

Nₘ=2m²-J(m-1)+1

(Jb=2,Jc=3,Jd=4,m=3,4,…)

Aₘ=2m² ( m=3,4,…)

Nₘ'=H- Nₘ, Aₘ'=H- Aₘ

确定各坐标轴正方向上的数字,而所有负方向上的数字,由互补的关系求得。再参照图例所示的排列规律,依次填写,即可方便得到任意偶阶幻方。

上述各式中,Nₘ表示各个坐标轴要填的数;J称初进数,对应B、C、D轴,J分别为2、3、4; m是各坐标格子序号,因为中心4阶幻方,已经占了格子序号1、2,所以m从3始取;H叫互补数,定义H=n²+1。也就是说,任何两个数之和为H,则称这两个数互补。 可以证明,由此方法得到的偶阶幻方,每一行、每一列及两条对角线上的数字之和

∑= n(1+ n²)/2

均相等,满足幻方的要求。

特别提示:

1、Ⅰ区域Dₘ+2等数字,包含在Ⅲ区域取数范围(Dₘ﹤Nₘ﹤Bₘ-1)内。当m =5,7,9,…时,这组数字中有且仅有一个数字(加m-1时),会跟C轴同序号的数字重复。处理的原则是,不许动C轴数字,在取数范围内,把本区域的这个重复数加1或减1,而把该数前后(均可)的数减1或加1,以避免重复且保持总和不变。实际上,Ⅰ区域要填的数,用Dₘ+2和(Dₘ+2)+2,…等,只是限制了总和与个数,填什么数是不影响结果的。

2、 严格按上述原则填完Ⅰ区域后,剩余在取数范围Dₘ﹤Nₘ﹤Bₘ-1内的数字,恰能填充Ⅲ区域。可以证明,这个范围的数字个数,恰好对应所有的空格。填充Ⅲ区域时,务须注意避免重复,无需顾虑影响总和(可证)。

二、幻和的证明

本幻方的编排特点,先由通项公式求得坐标上的数字,再结合排列规律,确定一系列关键点的数字,最后利用对应格子上的数字互补的关系,求得其他空格应填的数字。

为了表述的方便,我们把所给1→n²自然数,两分其为1→n/2,(n/2)+1→n²两部分,称N≤n/2的数为小数,称N>n/2的数为大数。由于由通项公式(Nₘ=2m²-J(m-1)+1等)决定的小数,仅是坐标序号m的函数,不含有与阶数有关的n因子,所以,小数的位置不因阶数的变化而变化;大数的数值由互补关系求得,相同的大数(Nₘ'=H - Nₘ,H=n²+1),会随所取阶数的不同而出现在不同的位置。

特别值得注意的是,本幻方的两斜轴(A、D),把幻方分为四个对顶的三角形区域。互为对顶的两个区域的数字,是关于中心线互补的;四条坐标轴上的数字,是关于中心点互补的;中心4阶幻方的幻和是2 H。明确这些关系,会使证明容易得多。

下面,我们就从最难下手的最下面一行开始证明。这一

这篇关于偶阶幻方的算术构造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689625

相关文章

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <strin

Codeforces Round #281 (Div. 2)A(构造+暴力模拟)

题目链接:http://codeforces.com/problemset/problem/493/A 解题思路: 暴力的判断,分三种情况去判断即可。注意如果之前已经被罚下场后,那么在后面的罚下情况不应该算在输出结果内。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <co

Codeforces Round #233 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/399/problem/A 解题思路: 构造出来即可,考虑p-k和p+k两个边界分别于1和n作比较,对左右符号特殊处理。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include

Codeforces Round #247 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/431/problem/A 解题思路: 构造出来即可。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <string>#inc

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. # 图片加法imp

C函数特性:构造与析构(constructor destructor)

文章目录 0x1 constructor0x2 constructor_priority0x3 destructor0x4 destructor_priority 0x1 constructor attribute((constructor)) 是 GCC 编译器的一个特性,它允许定义一个特殊的函数,这个函数会在 main 函数执行之前,也就是程序开始执行时被调用。 这通常用于执