Gaussian 整数学习笔记

引言

或许应该叫二次域入门中的入门笔记?

这个东西还一直鸽着……打算好好学学。

毕竟有一车数论知识,咱都还鸽着。

别人都能熟练运用二次互反律了,我还在学 Gaussian 整数。

其实 devin 半年前就讲过这玩意……

学习资料。stO ckh。

学习资料 2

部分参考 OI wiki。

由于是学习笔记,加上我也得在赶紧 OI 里运用这些东西,一些证明什么的就鸽了。反正学习资料里讲的很详细,OI wiki 上也有。

感觉之前在高代下册里学的环论基础全部忘光了……希望能趁此机会捡起一点来吧。由于很多东西都记不清了, Gaussian 整数一节下面可能会有大量概念性谬误,欢迎大家指正。

目前暂时先鸽到圆上整点计数为止。


二次剩余

由于学习资料里有,跟着带上先。

以下均在 \(p\) 为奇质数时讨论。

Legendre 符号

\[\left(\frac np\right)=\begin{cases}0&p\mid n\\1&p\nmid n\land\exist_{1\le a<p}p\mid a^2-n\\-1&{\rm otherwise}\end{cases} \]

Euler 判别准则

\[\left(\frac np\right)\equiv n^{\frac{p-1}2}\pmod p \]

使用原根可以轻松证明。此处略去。

Cipolla 算法

使用原根的知识,我们知道,在 \([1,p)\) 中有恰一半数有二次剩余,一半没有。

现在要求 \(n\) 的一个二次剩余,咋办?

随机选择一个数 \(a\),若 \(w=a^2-n\) 无二次剩余,则

\[(a+\sqrt w)^{\frac{p+1}2} \]

为一合法解。

其中此幂次为在扩域到 \(\mathbb Z_p[\sqrt w]\) 之后的幂次。

容易发现期望常数轮随机即可得解。

考虑为什么这么做是对的。

从学习资料里贺一段证明下来。

首先,易知 \(\forall x\in[1,p-1],\binom px\equiv 0\pmod p\)
因此,由二项式定理,\((a+\sqrt w)^p=\sum_{k=0}^p\binom pka^k(\sqrt w)^{p-k}\equiv a^p+(\sqrt w)^p\pmod p\)
根据费马小定理,\(a^p\equiv a\pmod p\)
根据 Euler 判别准则,\((\sqrt w)^p=w^{\frac{p-1}2}\sqrt w\equiv-\sqrt w\pmod p\)
因此,\((a+\sqrt w)^{p+1}\equiv(a+\sqrt w)(a-\sqrt w)=a^2-w=n\pmod p\)

现在再来看,为啥这个算法要求 \(w\) 无二次剩余呢?

因为我们在证明中用到了 \((\sqrt w)^p=w^{\frac{p-1}2}\sqrt w\equiv-\sqrt w\pmod p\) 这一条,而这一条依赖于 Euler 判别准则……

代码容易写出。

ullt v=0,w;
while(power(w=(v*v+p-n)%p,(p-1)/2,p)==1)v++;
typedef std::pair<ullt,ullt>num;
num base(v,1),ans(1,0);
auto mul=[&](num a,num b){
    return num((a.first*b.first+w*a.second%p*b.second)%p,(a.first*b.second+a.second*b.first)%p);
};
ullt index=(p+1)/2;
while(index){
    if(index&1)ans=mul(base,ans);
    base=mul(base,base),index>>=1;
}
v=ans.first,_min(v,p-v);
printf("%llu %llu\n",v,p-v);

Gaussian 整数

\(i^2=-1\),则 Gaussian 整数定义为

\[\mathbb Z[i]=\{a+bi|a,b\in\rm Z\} \]

中的每个元素。

加法、乘法定义显然,和复数类似。

事实上,这是一个整环,满足:

  • 对加法、乘法分别满足封闭性结合律交换律,且存在幺元(单位元,此处即 \(0\)\(1\))。换言之,这是一个交换幺环
  • 零因子,即不存在 \(a,b\neq0\),使 \(ab=0\)

其对应的可逆元群单位群)为 \(U(\mathbb Z[i])=\{1,i,-1,-i\}\)

\(z=a+bi\)共轭 \(\bar z\) 定义为 \(a-bi\)定义为 \(\operatorname{tr}z=z+\bar z=2a\)范数定义为 \(\|z\|=z\bar z=a^2+b^2\)

我们称两个数 \(z_1,z_2\in\mathbb Z[i]\) 相伴,当且仅当存在 \(e\in U(\mathbb Z[i])\),使得 \(z_1=ez_2\)

(顺带一提,容易发现相伴关系构成一个等价关系,群 \(U(\mathbb Z[i])\) 对应的相伴关系把 \(\mathbb Z[i]\) 划分为等价类集合 \(\mathbb Z[i]/U(\mathbb Z[i])\),我们称其为 \(\mathbb Z[i]\) 在群 \(U(\mathbb Z[i])\) 作用下的商集)

事实上,Gaussian 整数环还是一个欧几里得整环,满足唯一分解定理裴蜀定理辗转相除法等一系列基础数论定理。

此处的唯一分解定理、裴蜀定理与辗转相除法定义与通常所见的相比比较模糊,感性理解好了。严格的定义稍显复杂,可以参考学习资料 2 的相关内容。

啊下面的章节好像会提到 Gaussian 素数和辗转相除法,那没事了(

费马平方和定理

\(p\) 是奇质数,则有

\[p\equiv1\pmod4\Leftrightarrow\exist a,b\in\mathbb N,p=a^2+b^2 \]

不会证明,摆了。详细证明可以看学习资料。

而且,这样的 \((a,b)\) 无序对存在且唯一。

对于这种素数,我们称为 \(4n+1\) 型素数。另外的奇质数称为 \(4n+3\) 型素数。

Gaussian 素数

Gaussian 整数环的素元称为 Gaussian 素数,其共轭、相伴仍为 Gaussian 素数。

等等,素元定义是啥啊?

如果在交换环 \(R\) 上,一个非零因子且非幺元的元素 \(p\) 满足 \(a,b\in R,p|ab\Rightarrow p|a\lor p|b\),则称其为素元

\(z=a+bi\) 为 Gaussian 素数,当且仅当下列条件之一成立:

  • \(a\)\(0\)\(|b|\)\(4n+3\) 型素数;或者 \(b\)\(0\)\(|a|\)\(4n+3\) 型素数。(换言之,\(z\)\(4n+3\) 型素数在 \(\mathbb Z[i]\) 上的相伴元)
  • \(\|z\|=a^2+b^2\)\(2\)\(4n+1\) 型素数。(换句话说,就是素数)

证明继续咕咕。

按 OI-wiki 上的说法,我们把这个细分为三类数:

  • \(4n+3\) 型素数在 \(\mathbb Z[i]\) 上的相伴元的,我们称为惯性数
  • 否则,若 \(\|z\|=2\),我们称为分歧数
  • 否则,我们称为分裂数

这个名字生动形象地展现了这些数的形态。

容易证明,对每个质数 \(p\),其对应的 Gaussian 素数个数,在 \(p\)\(4n+1\) 型素数时有 \(8\) 个,在 \(p\)\(4n+3\) 型素数时为 \(4\) 个,在 \(p\)\(2\) 时也为 \(4\) 个。

\(2\),其对应 \(1+i,1-i,-1+i,-1-i\) 四个分歧数,其两两相伴且成对共轭。

\(4n+3\) 型素数,其对应 \(p,-p,pi,-pi\) 四个惯性数,其两两相伴且成对共轭。

\(4n+1\) 型素数,设 \(p=a^2+b^2(0<a<b)\),其对应 \(a+bi,b-ai,-a-bi,-bi+a,a-bi,b+ai,-a+bi,-bi-a\) 八个分裂数,前后四个分别两两相伴,且两组一一对应共轭。

\(\mathbb Z[i]\) 上的唯一分解定理要求对每组相伴素数仅考虑其中一个,最后再乘上一个可逆元。

辗转相除法

所以辗转相除法定义到底是什么?

我们得先定义带余除法

这里贺一段下来。

\(a,b\in\mathbb Z[i]\),那么必定存在一组 \(q,r\in\mathbb Z[i]\) 使得 \(a=qb+r\land\|r\|\le\frac{1}{2}\|b\|\)
我们称 \(q\)\(a\) 整除 \(b\) 的商,称 \(r\)\(a\) 整除 \(b\) 的余数。

证明也贺一段下来。这是一段构造性证明

假设 \(\frac ab=x+yi\)
我们不妨取 \(q=x'+y'i\),其中 \(x'=\left\lfloor x+\frac12\right\rfloor,y'=\left\lfloor y+\frac12\right\rfloor\)
则得到 \(|x-x'|\le\frac12,|y-y'|\le\frac12\)
因此 \(\|(x-x')+(y-y')i\|\le\frac12\)
于是 \(r=a-qb=b((x-x')+(y-y')i)\) 满足 \(\|r\|=\|b\|\times\|(x-x')+(y-y')i\|\le\frac12\|b\|\)

然后辗转相除法就容易写出了。基本就和平常所写的一致。

可以参考下面的实现。

分解 \(4n+1\) 型素数

好,到应用层面了。

现在,给你奇质数 \(p=4n+1\),要求对其做二平方和分解。

怎么做?

\(p=a^2+b^2\)

\(z=a+bi\),则 \(p=\|z\|\)

\(k\in\mathbb Z\) 满足 \(k^2\equiv-1\pmod p\),则 \(p|(k+i)(k-i)\)

则取 \(z=\gcd\{p,k+i\}\) 为一组可行解。

对于 \(k\) 的选取,设 \(\left(\dfrac ap\right)\equiv a^{\frac{p-1}2}\equiv-1\pmod p\),则 \(a^{\frac{p-1}4}\bmod p\) 为一可行 \(k\)

显然在期望常数轮随机后即可找到合适的 \(k\)

题目链接

注意乘法会爆 long long,要使用精度较高的方法。

示例代码

圆上整点计数

高明科技。

\(x^2+y^2=C\) 上的整点 \((x,y)\) 数目。

即求范数为 \(C\) 的 Gaussian 整数 \(z=a+bi\) 个数。

考虑先在 \(\mathbb Z^+\) 上运用唯一分解定理。

\[C=2^{a_2}\left(\prod_{p\text{ 为 }4n+3\text{ 型素数}}p^{a_p}\right)\left(\prod_{p\text{ 为 }4n+1\text{ 型素数}}p^{a_p}\right) \]

不妨先考虑一种解法,然后再取四个相伴。

对每个素因子我们分别考虑其分解为 \(u\bar u\)\(u\)\(z\) 的贡献。显然答案互不干涉。

\(2\) 因子显然对答案无影响。

\(4n+3\) 型素数因子若有 \(2\nmid a_p\),则此题无解;否则无影响。

\(4n+1\) 型素数因子有 \(a_p+1\) 种分配答案的方法。

因此,再考虑上可逆元的贡献 \(4\),答案即为

\[4\left(\prod_{p\text{ 为 }4n+3\text{ 型素数}}[2|a_p]\right)\left(\prod_{p\text{ 为 }4n+1\text{ 型素数}}a_p+1\right) \]

然后容易注意到这是一个积性函数,所以可以用 \(\rm Min\_25\) 筛解决前缀求和问题。

但我不会 \(\rm Min\_25\),所以别想了。

求单项题目链接

求前缀和题目链接

posted @ 2022-10-26 21:52  myee  阅读(89)  评论(1编辑  收藏  举报