我们有单位根反演:

\[\sum_{k\mid n}[x^n]f(x)=\frac{1}{k}\sum_{i=0}^{k-1}f(\omega_k^i).
\]

我们有 CRT:

\[x\equiv r_{1..n}\pmod{m_{1..n}}\\
\Leftrightarrow x\equiv \sum_{i=1}^nr_i\cdot\operatorname{inv}(M/m_i,m_i)\cdot M/m_i\pmod M.
\]

我们还有 Lagrange 插值:

\[f(x)=\sum_{i=0}^{\deg f}f(x_i)\prod_{j\neq i}\frac{x-x_j}{x_i-x_j}.
\]

然后我宣称 CRT 才是老大!


  从单位根反演开始,其实它指出

\[[x^0](f(x)\bmod(x^k-1))=\frac{1}{k}\sum_{i=0}^{k-1}f(\omega_k^i).
\]

(左侧在组合意义上与原式左侧相等是显然的,就不证了。)它是如何实现这一过程的?注意到有

\[x^k-1=0\Leftrightarrow x\in\{\omega_k^i\}_{i=0}^{k-1},
\]

然后浅代数基本定理一下就是

\[x^k-1=(x-\omega_k^0)(x-\omega_k^1)\cdots(x-\omega_k^{k-1}).
\]

如果我们求出 \(y_i=[x^0](f(x)\bmod (x-\omega_k^i))\),大概就可以 CRT 一发合并了?

  注意到 \(f(x)\bmod (x-t)=f(t)\),所以 \(y_i=f(\omega_k^i)\)。套一套 CRT 的话……

\[f(x)\equiv y_i\pmod{x-\omega_k^i}\\
\Leftrightarrow f(x)\equiv\sum_{i=0}^{k-1}y_i\cdot\prod_{j\neq i}\frac{1}{\omega_k^i-\omega_k^j}\cdot\prod_{j\neq i}(x-\omega_k^i)\pmod{x^k-1}\\
\begin{aligned}[]
\Rightarrow [x^0](f(x)\bmod (x^k-1)) &= \sum_{i=0}^{k-1}y_i\cdot \frac{\omega_k^i}{k}\cdot \omega_k^{-i}\\
&= \frac{1}{k}\sum_{i=0}^{k-1}f(\omega_k^i).
\end{aligned}
\]

(第二项的化简好像 3B1B 讲过形象证明,不过可以直接洛。)这 tm 不就是所谓单位根反演吗?

  但是,要说从 \(f(x)\bmod (x^k-1)\) 推导单位根反演,我一开始的思路是 Lagrange 插值。但……也许不怎么科学,我们用 \(f\) 的点值而非 \(f(x)\bmod(x^k-1)\) 的点值。带入插值公式:

\[g(x)=\sum_{i=0}^{k-1}f(\omega_k^i)\prod_{j\neq i}\frac{x-\omega_k^i}{\omega_k^i-\omega_k^j}.
\]

对比上面 CRT 的结论,发现 \(g(x)=f(x)\bmod (x^k-1)\),我们也可以从 Lagrange 插值的角度,取常数项得到单位根反演。

  那么 CRT 和 Lagrange 插值又是什么关系?

  式子是一样的,也就是说……

  若 Lagrange 用 \(x_{1..n}\) 去插 \(f(x)\),令 \(h(x)=\prod_{i=1}^n(x-x_i)\),那实际上得到的 \(g(x)\) 就是

\[g(x)\equiv f(x)\pmod{h(x)}.
\]

为什么插出 \(n\) 次多项式至少需要 \(n+1\) 个点值?因为 \(\deg h>n\) 时,可以保证 \(g(x)=f(x)\)。而在推导单位根反演的过程中,我们不知道 \(\deg f\),自然也就是引入模 \((x^k-1)\) 来表示最终结果了。


  也许可以这么说:

  • Lagrange 插值是 CRT 的特殊情况(无需取模);
  • 单位根反演是弟中弟。

  Lagrange 插值法是以法国十八世纪数学家 Joseph-Louis Lagrange 命名的一种多项式插值方法。然而在南北朝时期,《孙子算经》卷下第二十六题就已经提出了更为广义的中国剩余定理。比西方整整早了十三个世纪!(doge

  还是希望第一次学 Lagrange 插值 / CRT / 单位根反演,或者第一次学完 Lagrange 插值 & CRT & 单位根反演 的时候,就被安利这个惊喜 w。



  前面是第一个惊喜,下面这首翻唱是第二个咯。

  真的是 IT 的时代啊,最近的 ACE 和 SynthV 引入 AI 的技术力真的比传统 V 强大了几个层次,可以让音乐圈不明真相的叔叔评价“被上帝吻过的嗓音”。主页推送几乎从【洛天依原创】全部变成【洛天依 AI】(当然,中间没空格 w)。虽然 P 主变 A 主从客观上看应该是大势所趋,但不管怎么说都算是对“情怀”的巨大冲击。而且“不难听的歌”的调试门槛降低,肯定又会有一堆小鬼来污染环境。

  没有什么成熟的见解。有意思的是,“它们”都是洛天依,这似乎契合了我所认为的“爱”虚拟歌姬的本质。

  结束语:都给我去听啊喂!

Diary & Note - 两个惊喜的更多相关文章

  1. [翻译]魅族的M1 Note是十分廉价(dirt-cheap)的iphone5C增强版

    Meizu's M1 Note is a dirt-cheap iPhone 5c on steroids 魅族的M1 Note是十分廉价(dirt-cheap)的ihone5C增强版 While m ...

  2. Oracle库Delete删除千万以上普通堆表数据的方法

    需求:Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操 ...

  3. SVN学习之参数定义及设置

    http://jackyrong.iteye.com/blog/238835 conf目录中打开svnserve.conf ,去掉注释,搞成如下这样 [general] anon-access = r ...

  4. 《锋利的Jquery第二版》读书笔记 第三章

    DOM操作的分类 1.DOM Core不专属JavaScript,任何一种支持DOM的程序设计语言都可以使用它,也可以处理XML等标记语言编写出来的文档,getElementById().setAtt ...

  5. SVN配置文件详解

    本章将详细介绍前一章所涉及的两个配置文件, svnserve.conf 和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义.除此之外的其他配置.安装等内容,不是本文重点,读者若有 ...

  6. threejs里面的vector3源码解析

    // File:src/math/Vector3.js /** * @author mrdoob / http://mrdoob.com/ * @author *kile / http://kile. ...

  7. mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复

    1.索引: 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进 ...

  8. C 语言 符合运算符

    复合赋值 5个算术运算符 + - * / % 可以和赋值运算符 = 结合起来形成符合运算符 += -= *= /= %= total += 5 total = total + 5 note:两个运算符 ...

  9. OJ题解记录计划

    容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2 ...

  10. PHP之数组函数

    php数组中的预定义变量 预定义常量 CASE_LOWER (integer) CASE_LOWER 用在array_change_key_case()中将数组的键名转换为小写字母.这也是array_ ...

随机推荐

  1. CSS动画(波光粼粼登录页面)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa4AbemkU3vLRIDzTIgPHSjicia97wfvMVAhqZL4lsGbQQCbsV ...

  2. Java基础综合项目(ATM系统)

    文章目录 1.ATM项目介绍 2.项目架构搭建.欢迎界面设计 3.开户功能实现 4.生成卡号 5.登录功能 6.展示用户操作界面 7.查询账户.退出 8.存款 9.取款 10.转账 11.修改密码 1 ...

  3. php几种常用的算法

    1 <?php 2 3 // 选择排序 4 5 function select_sort($arr) 6 7 { 8 9 $count = count($arr); 10 11 for ($i ...

  4. 从编译链接到cmake

    .c(.cpp)文件到可执行文件 对于一份简单的.c/.cpp为后缀的源文件,他所使用的语言是人类可以阅读并看懂的,但是对于计算机来说,其可理解并执行的是二进制的机器码. 也就是说,计算机所能运行的是 ...

  5. Linux 练习

    目录 练习一 练习2 练习一 分析日志t.log(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序(腾讯) 每行格式:http: //192.168.200.30/index1.html ...

  6. vue2-基础核心

    vue简介 vue中文官网 动态构建用户界面的渐进式 JavaScript 框架 vue的特点: 遵循MVVM模式 采用组件化模式,提高代码复用率,让代码更好维护 声明式编码,无需直接操作DOM,提高 ...

  7. html代码新手教学

    HTML 是超文本标记语言(HyperText Markup Language)的缩写,是用来描述网页结构的标记语言.在这篇教学中,我们将介绍一些 HTML 基础知识,帮助新手快速学习并掌握如何编写简 ...

  8. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-5-创建首个自动化脚本(详细教程)

    1.简介 前面几篇宏哥介绍了两种(java和maven)环境搭建和浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本.前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容,首先 ...

  9. php xattr操作文件扩展属性再续

    今天偶然发现自己电脑还有一个隐藏硬盘,500G的我平时没挂载,就没用到,然后这次就给它挂载了,然后发现读取文件,操作xattr都很慢,比之前速度慢10倍左右,猜测可能是固态硬盘和机械硬盘的差别关系.看 ...

  10. 使用 httputils + protostuff 实现高性能 rpc

    1.先讲讲 protostuf protostuf 一直是高性能序列化的代表之一.但是用起来,可难受了,你得先申明 protostuf 配置文件,并且要把这个配置文件转成类.所以必然要学习新语法.新工 ...