题意简述:
给定复数\(z=\sum\limits_{i=1}^nz_i(z_i\in\mathbb Z[i])\),求\(\mathbb K[\mathbb Z[i]]\)上的使得\(f(z)=0\)的多项式\(f(z)\)的最低次数,答案对\(998244353\)取模。
数据范围:
\(n\le100,|z_i|\le10^9\)
解法:
设\(p(x)\)为\(z\)在\(\mathbb Z\)上的极小多项式,那么\(\deg p=[\mathbb Z(a):\mathbb Z]\)。
若\(a_i\)两两互质,则显然有\([\mathbb Z(\sqrt a_1,\cdots,\sqrt a_n):\mathbb Z]=2^n\)。
不妨认为\(\mu(a_i)\ne0\),对于每个\(a_i\)构造一个向量\(\mathbf b_i\),满足\(\mathbf b_{i,j}=p_j|a_i\)。
设\(\mathbb F_2\)下\(\operatorname{span}(\mathbf b_1,\cdots,\mathbf b_n)=m\),那么\([\mathbb Z(\sqrt a_1,\cdots,\sqrt a_n):\mathbb Z]=2^m\)。
记\(a=\sum\limits_{i=1}^na_i\),又因为\(p(a)=p(\overline a)=0\),所以我们有\([\mathbb Z(a):\mathbb Z]=[\mathbb Z(\sqrt a_1,\cdots,\sqrt a_n):\mathbb Z]=2^m\)。
我们知道\(\mathbb Z[i]\)上是有唯一分解定理的,因此可以套用\(\mathbb Z\)上的做法。
具体来说是因为\(i\)不与任何其它\(\mathbb Z[i]\)上的素数线性相关,因此我们可以将\(i\)视为素数。
考虑\(z=x+yi\in\mathbb Z[i]\)的素性:
\(1.\)若\(xy=0\),则\(z\in\mathbb P[i]\Leftrightarrow\operatorname{norm}(z)|\in\mathbb P\wedge\operatorname{norm}(z)\not\equiv1\pmod4\)。
\(2.\)若\(xy\ne0\),则\(z\in\mathbb P[i]\Leftrightarrow\operatorname{norm}(z)\mathbb P\)。
那么我们可以直接对\(\operatorname{norm}(z)\)分解质因数,对于\(p|\operatorname{norm}(z)\):
\(1.\)若\(p=2\),则\(1+i|z\)。
\(2.\)若\(p\equiv3\pmod4\),则\(p|z\)。
\(3.\)若\(p\equiv1\pmod4\),找到\(q\)使得\(q^2\equiv-1\pmod p\),则\(p|\operatorname{norm}(x+i)\wedge p|\operatorname{norm}(p)\),因此\(\gcd(x+i,p)|z\)。
求\(\gcd\)可以用辗转相除法,我们知道\(p\bmod q=p-\lfloor\frac pq\rfloor q\),\(\lfloor z\rfloor\)根据\(\Re(z),\Im(z)\)分别上/下取整有\(4\)种可能的结果,选择模长最小的即可,不难证明复杂度为\(O(\log |z|)\)。
总的时间复杂度为\(O(\frac{n^3\log|z|}{\omega}+n\sqrt{|z|})\)。