A098928:对 n×n×nn\times n\times nn×n×n 的三维立方点阵,问有多少立方体以其格点为顶点。

为了计算这个问题的答案,我们不妨先看看 222 维的情况。我们先考虑一个斜着摆的正方形,其边向量可以写作 (a,b),(b,−a),(−a,−b),(−b,a)(a,b),(b,-a),(-a,-b),(-b,a)(a,b),(b,−a),(−a,−b),(−b,a)。考虑这个形状有多少种方法放进 n×nn\times nn×n 的点阵。这取决于它在 x,yx,yx,y 上的长度和宽度。无疑其长宽都是 a+ba+ba+b。那么对于被长宽为 hhh 框住的正方形有 hhh 种,而这样的正方形有 (n−h)2(n-h)^2(n−h)2 种放法。所以答案就是 ∑hh⋅(n−h)2\sum_h h \cdot (n-h)^2∑h​h⋅(n−h)2。

对于三维情况,我们发现有一个很大的问题:三个维度的宽度可以是不一样的,比如 (3,4,0),(4,−3,0),(0,0,5)(3,4,0),(4,-3,0),(0,0,5)(3,4,0),(4,−3,0),(0,0,5) 支成的立方体。我们需要用比较聪明的方法枚举这三条棱。具体来说,需要满足条件:

向量 u,v,w\mathbf{u,v,w}u,v,w 两两正交(u⋅v=0\mathbf{u\cdot v = 0}u⋅v=0)且等长 ∣u∣=∣v∣=∣w∣|\mathbf{u}|=|\mathbf v| = |\mathbf w|∣u∣=∣v∣=∣w∣。

对于这样的一组解,它有 (n−∣ux∣−∣vx∣−∣wx∣)⋅(n−∣uy∣−∣vy∣−∣wy∣)⋅(n−∣uz∣−∣vz∣−∣wz∣)(n - |u_x| - |v_x| - |w_x|) \cdot (n - |u_y| - |v_y| - |w_y|) \cdot (n - |u_z| - |v_z| - |w_z|)(n−∣ux​∣−∣vx​∣−∣wx​∣)⋅(n−∣uy​∣−∣vy​∣−∣wy​∣)⋅(n−∣uz​∣−∣vz​∣−∣wz​∣) 种放置方法(前提是各项均 >0>0>0)。

接 yhx-12243 的论述,我们知道可以借助 Hurwitz 四元数 H={sω+xi+yj+zk∣s,x,y,z∈Z},ω=1+i+j+k2H=\left\{ s \omega + x \mathrm i + y \mathrm j + z \mathrm k \mid s,x,y,z\in \mathbb Z \right\}, \omega = \frac{1+\mathrm i + \mathrm j + \mathrm k}{2}H={sω+xi+yj+zk∣s,x,y,z∈Z},ω=21+i+j+k​ 来枚举这样的向量组。

具体来说,对于每个 q∈Hq\in Hq∈H,考虑 v=xi+yj+zkv = x \mathrm i + y \mathrm j + z \mathrm kv=xi+yj+zk 被共轭作用 v↦qvq‾v \mapsto qv\overline qv↦qvq​ 确定了一个伸缩旋转。具体来说,首先是进行了旋转 v↦qvq−1v \mapsto q v q^{-1}v↦qvq−1,然后伸长了 ∣qvq‾∣/∣v∣=∣q∣2|qv\overline q| / |v| = |q|^2∣qvq​∣/∣v∣=∣q∣2 倍,也就是 qqq 的范数。但这并没有覆盖所有的变换,再引入无平方因子的奇数 rrr,所有的 (r,q)(r,q)(r,q) 构成的 v↦r⋅qvq‾v \mapsto r\cdot qv\overline qv↦r⋅qvq​ 精确覆盖了所有情况。

我们可以直接枚举 r∣q∣2≤nr |q|^2 \le nr∣q∣2≤n 的 (r,q)(r,q)(r,q),由于 ∣q∣2≤n|q|^2\le n∣q∣2≤n 的 Hurwitz 四元数只有 O(n2)O(n^2)O(n2) 种,那么再枚举 rrr 之后仍然只有 ∑r(n/r)2=O(n2)\sum_r (n/r)^2 = O(n^2)∑r​(n/r)2=O(n2) 种。因此枚举的总时间为 O(n2)O(n^2)O(n2)。(这还是比较反直觉的,因为这说明起手 O(n3)O(n^3)O(n3) 枚举其中一条棱的做法走不通!)

这是一份 代码。加个前缀和优化稍微改改就能在几分钟内跑出 n≤104n\le 10^4n≤104 的所有答案。

它还有很大的优化空间,因为一个立方体被从每个顶点数了三次,也就是枚举自带了一个 242424 倍的常数。这对应于 ∣q∣=1|q|=1∣q∣=1 的 Hurwitz 四元数总共有 242424 种。如果能直接在 H/{∣ω∣=1∣ω∈H}H / \{ |\omega|=1\mid \omega\in H\}H/{∣ω∣=1∣ω∈H} 上枚举就可以去掉这个常数了。这里 是 yhx-12243 优化的版本。

OEIS A098928 数表扩充相关推荐

  1. c++虚函数和虚函数表

    前言 (1)虚基表与虚函数表是两个完全不同的概念 虚基表用来解决继承的二义性(虚基类可以解决). 虚函数用来实现泛型编程,运行时多态. (2)虚函数是在基类普通函数前加virtual关键字,是实现多态 ...

  2. 增大mysql修改表空间_扩充数据库表空间

    ALTER TABLESPACE ADD DATAFILE , [REUSE] NEXT MAXSIZE <>中是你要填的内容,有|是选其一. 如:增加文件是d:\dbfs\mydatab ...

  3. 编译原理课程设计-对pl0语言进行扩充

    文章目录 一. 设计目的及要求 1.1 设计目的 1.2 设计要求 1.2.1 要求一 1.2.2 要求二 1.2.3 要求三 二.程序设计 2.1 程序的组织结构 2.1.1 PL/0编译程序函数定 ...

  4. C++虚函数和虚函数表原理

    虚函数的地址存放于虚函数表之中.运行期多态就是通过虚函数和虚函数表实现的. 类的对象内部会有指向类内部的虚表地址的指针.通过这个指针调用虚函数. 虚函数的调用会被编译器转换为对虚函数表的访问: ptr ...

  5. 20以内分数化小数表_数与代数之小数

    一.概念描述 现代数学:小数亦称十进小数,是实数的一种特殊的表现形式.所有分数都可以表示成小数,根据十进制的位值原则,把十进分数仿照整数的写法写成不带分母的形式,小数中的圆点叫作小数点,它是一个小数的 ...

  6. mysql 字段扩容_解决DB2事物日志满、扩充表字段长度和表空间的命令

    一.通常我们在使用db2导入数据或进行别的操作时会遇到事物日志已满的情况,导致操作无法继续. 在windows系统中,我们可先db2 get db cfg for dbname(要修改的数据库名) 来 ...

  7. Keras ImageDataGenerator用于数据扩充/增强的原理及方法

    摘要 在这篇博客中,您将学习如何使用Keras的ImageDataGenerator类执行数据扩充/增强.另外将介绍什么是数据增强,数据增强的类型,为什么使用数据增强以及它能做什么/不能做什么. 有三 ...

  8. C++对象的内存布局1---基础篇----C++ 虚函数表解析

    [-] 前言 虚函数表 一般继承(无虚函数覆盖) 一般继承(有虚函数覆盖) 多重继承(无虚函数覆盖) 多重继承(有虚函数覆盖) 安全性 结束语 附录一:VC中查看虚函数表 附录 二:例程 前言 C++ ...

  9. 动手扩充FreeTextBox的功能

    作者:朱俊 代码:C# 关键字:FreeTextBox.流媒体 出自:http://blog.csdn.net/foxmail/archive/2004/08/21/81096.aspx 摘要:最近一 ...

  10. C++中的虚函数表介绍

            在C++语言中,当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定.因为我们直到运行时才能知道到底调用了哪个版本的虚函数,所以所有虚函数都必须有定义.通常情况下,如果我们不使 ...

最新文章

  1. 081_Introducing trigger handler class
  2. 【Opencv实战】图像修复神技?看我一秒修复家里的老照片
  3. java函数求方程,Commons Math学习笔记——函数方程求解
  4. 华为魔术手机拆机图解_华为荣耀20进水不开机
  5. 李航博士:《统计学习方法》第二版上线啦!增加无监督学习!
  6. mybatis-plus主键生成策略
  7. 攻防世界crypto部分sherlock的writeup,原来不是培根密码。
  8. CF364D Ghd 随机化
  9. ERROR: Cannot uninstall 'xxx'. It is a distutils installed project and thus we cannot accurately
  10. 【hexo】基础教程-六-添加百度统计和Google统计
  11. layui table动态选中_NeurIPS 2020 | 伯克利新工作: 基于动态关系推理的多智能体轨迹预测问题...
  12. 烽火2640路由器命令行手册-14-桥接配置命令
  13. 大学生网页设计模板 静态HTML个人主页网页作业成品 DIV CSS个人介绍主题静态网页
  14. 2020款苹果iPad Pro将搭载3D感应后置摄像头
  15. 4.Vue指令(Directives)
  16. K2 BPM_【解决方案】从“制造”到“智造”,K2推动制造业转型升级_业务流程管理系统...
  17. 数学建模算法与应用【BP神经网络算法】
  18. 设计模式之代理模式(C++)
  19. 小米10s微距模式使用教程分享
  20. vscode-remote 无法写入文件“vscode-remote://ssh-remote

热门文章

  1. java web 导出excel_javaweb导出excel表格
  2. ChartControl控件绘制折线图
  3. java视频通话_Java使用WebSocket和WebRTC视频通话
  4. IEEE会议论文模板下载
  5. 卫星通信系统按照工作轨道分类
  6. java 7下载_java7下载 v7.0 官方最新版
  7. PowerBuilder9.0 安装包及注意事项
  8. 【SAP消息号AA776】
  9. (一)LINGO入门---软件安装
  10. 中文知识图谱研讨会的学习总结 (上) 图谱引入、百度知心、搜狗知立方