「学习总结」基本卷积算法

📄 PDF 📝 Source

「做多项式题就像嗑药,出多项式题就像贩毒。」 —— 某福建知名OI选手

学了学红日bn一年前玩剩下的东西。

倒是扩展了 FWT 的一种思路吧。

基本卷积算法

加法卷积

用于解决形如以下问题: 给出两个序列 A,BA, B。求两个序列的卷积序列 CC,其中序列 CC 的定义如下

Ck=i+j=kAi×Bj(1) C_k = \sum_{i+j=k}A_i \times B_j \qquad{(1)}

序列可以看作是函数的系数表示法,所以我们可以定义函数 $F(x) = _{i } A_i x^i $ 和函数 G(x)=i0BixiG(x)= \sum_{i \ge 0} B_i x^i 分别对应序列 A,BA, B 的两个函数。

类似的,还可以定义序列 CC 对应函数 T(x)=i0CixiT(x) = \sum_{i \ge 0} C_i x^i

注意到这种定义就是将序列的第 ii 个数当作多项式函数的第 ii 次系数。

注意到

T(x)=F(x)×G(x)(2) T(x)=F(x) \times G(x) \qquad{(2)}

这个是后面卷积方法的核心工作原理。本质上是 建立了 序列运算 与其对应 函数(多项式)运算 的一种联系。

注意到 (eq.~eq. 2) 也可以理解为对于任意常数 aa,总有 T(a)=F(a)×G(a)T(a)=F(a) \times G(a)

也就是说,如果我们知道了 G(x)G(x)F(x)F(x)aa 处的函数值,那么他们相乘就能够得到 T(x)T(x)aa 处的函数值。

考虑如果存在一种变换,能够快速计算 G(x)G(x)F(x)F(x) 在某些特定自变量 a1,a2,a3,ak\\{a_1, a_2, a_3,\cdots a_k\\} 处的函数值,那么就能快速算出 T(x)T(x) 在这些自变量处的函数值。

如果存在某种逆变换,能够快速将函数在某些自变量处的函数值转换成每一次项的系数,那么就能够求出 T(x)T(x) 的系数(即序列 CC)了。

总的来说,希望存在一种序列上变换 FFT(T)\operatorname{FFT}(T),使得 FFT(C)=FFT(A×B)=FFT(A)FFT(B) \operatorname{FFT}(C) = \operatorname{FFT}(A \times B) = \operatorname{FFT}(A) \cdot \operatorname{FFT}(B) 其中 ×\times 表示序列加法卷积 (eq.~eq. 1),\cdot 表示对应位置相乘。

并且这种变换存在逆变换,能够将 FFT(C)\operatorname{FFT}(C) 还原为 CC

通过上述描述可以发现,对于一个函数 G(x)G(x) 来说,其表示成序列的方式有两种:一种是构造序列,使得序列第 ii 位为多项式函数 G(x)G(x) 的第 ii 次项系数。另一种是指定一系列取值a1,a2,a3,ak\\{a_1, a_2, a_3,\cdots a_k\\} ,分别带入函数中,得到的函数值依次排开,成为一个序列。我们称前者为函数 G(x)G(x) 的系数表示法,称后者为其点值表示法。而我们所希望的变换就是能够实现函数的系数表示法点值表示法 相互转化。

因为 两函数相乘时,其对应的系数表示法的序列就是在做卷积操作,对应了我们希望的运算,但是这个并不能快速计算。而两函数相乘,对于点值表示法,就仅仅是对应位置相乘,这个可以快速计算。所以可以考虑如果能够快速实现 函数的系数表示法点值表示法 相互转化。就能够解决上述问题。可以先转化为点值表示法,然后对点相乘后,再转换为系数表示法,就相当于对序列做卷积。

快速傅里叶变换(FFT)

快速傅里叶变换 就是一种满足上述条件的变换。她可以使得函数在系数表示法与点值表示法之间转换。 时间复杂度为 O(nlogn)\mathcal{O}(n \log n)

考虑上述过程中,并没有限制点值表示法中的点值应该取哪些值,所以可以考虑取一些有丰富性质的数字,利用这些性质加速运算。

对于 FFT 我们取 n次单位根 来加速运算。nn 为待变换序列长度。

单位根

n 次单位根记作 ωn\omega_n。其定义为 ωn=cos2πn+isin2πn\omega_n = \cos{\frac{2\pi}{n}} + \mathrm{i}\sin{\frac{2\pi}{n}},这是一个虚数。虚数可以通过向量来表示,而 ωn\omega_n 就可以考虑为一个模长为 11 ,与 xx 轴夹角为 2πn\frac{2\pi}{n} 的向量。易知, ωnk=cos2πkn+isin2πkn\omega_n^k=\cos{\frac{2\pi k}{n}} + \mathrm{i}\sin{\frac{2\pi k}{n}}

他有如下性质

  • ωnk=ω2n2k\omega_n^k=\omega_{2n}^{2k}
  • ωnk+n2=ωnk\omega_n^{k + \frac{n}{2}}=-\omega_{n}^{k}
  • ωn0=ωnn=1\omega_n^0=\omega_n^n=1

这些性质都可以通过其定义得知。

考虑将 ωn0,ωn1,ωn2,,ωnn1\omega_n^0, \omega_n^1, \omega_n^2, \cdots, \omega_n^{n-1} 带入函数,得到点值即可。

蝴蝶操作

分别抽取函数 F(x)F(x) 的奇、偶次项系数构成两个新函数 G(x),H(x)G(x), H(x)。 易知: F(x)=G(x2)+xH(x2) F(x) = G(x^2) + xH(x^2) F(ωnk)=G(ωn/2k)+ωnkH(ωn/2k) F(\omega_n^k) = G(\omega_{n/2}^k) + \omega_n^k H(\omega_{n/2}^k) F(ωnk+n/2)=G(ωn/2k)ωnkH(ωn/2k) F(\omega_n^{k + n/2}) = G(\omega_{n/2}^k) - \omega_n^k H(\omega_{n/2}^k)

划分了子问题,分治即可。这里必须保证 n=2kn = 2^kkNk \in \mathbb{N}

逆变换

单位根还有如下性质 i=0n1(ωnk)i={0k0nk=0 \sum_{i=0}^{n-1}\left(\omega_n^k\right)^i= \begin{cases} 0& {k \not= 0}\\\\ n& {k = 0} \end{cases} 第二种情况显然,第一种情况根据等比数列求和公式可以得证。

根据上述性质,我们只需要取单位根为之前的倒数,然后跑一遍 FFT\operatorname{FFT} 对结果除以 nn 即可。 不会推QAQ。

快速数论变换(NTT)

FFT 需要实数运算,对精度要求较高。且无法解决常见的取模要求。

注意到 FFTFFT 中所依赖的是一个复平面上的单位圆,其实剩余系本身就可以看作一个环。可以考虑在剩余系下寻找具有与单位根性质类似的数字。

设质数 PP 的原根为 gg。那么 k[0,φ(P)1],kN,gk\forall k \in [0, \varphi(P) - 1],k \in \mathbb{N},g^{k},可以表示 PP 的剩余系中除 00 以外的任何数字,显然可表示的数字有 P1P-1 个。

以下关于剩余系类比复平面单位圆的描述由笔者口胡,不保证语言严谨。

FFT\operatorname{FFT} 中取单位根的方式本质上实在均分复平面上单位圆。而 NTT\operatorname{NTT} 中,如果将 gkg^k 依次排成一个环,即剩余系,我们一样可以通过均分这个环,来取剩余系下的“单位根”,来获得和之前复平面单位根 类似性质的一些数。显然,这里需要保证在我们均分单位圆的过程中,每个值都能取到,也就是 nφ(P)n | \varphi(P),即 n(P1)n | (P-1)

所以这里的剩余系取值有一定要求,变换中所要求的 nn 都是 22 的次幂,需要保证 P1P-122 的幂次应该足够大。(文末附质数取值表

P1=q×nP-1 = q\times n

考虑将 gn=gqg_n=g^q 当作 ωn\omega_n 即可,根据上面的描述,ωn\omega_n 所具有的性质,gng_{n} 显然成立。这里的 qq 可以想成等分环时的单位角度。

关于 蝴蝶操作逆变换 的手法和 FFT\operatorname{FFT} 是一样的。

位运算卷积

类似地,定义位运算序列卷积。 给出两个序列 A,BA, B。求两个序列的卷积序列 CC,其中序列 CC 的定义如下

Ck=ij=kAi×Bj(3) C_k = \sum_{i\oplus j=k}A_i \times B_j \qquad{(3)}

可以仿照上述思路,构造一种作用在序列上的变换 FWT\operatorname{FWT},使得其满足

FWT(C)=FWT(AB)=FWT(A)FWT(B)(4) \operatorname{FWT}(C) = \operatorname{FWT}(A \oplus B) = \operatorname{FWT}(A) \cdot \operatorname{FWT}(B) \qquad{(4)}

ABA \oplus B 中的 \oplus 指某种位运算。指下标的运算方式。即 (eq.~eq. 3) 中的 ij=ki\oplus j=k

快速沃尔什变换(FWT)

考虑分治处理,令 A0A_0AA 的前一半, A1A_1AA 的后一半。可以考虑如果已经求出了 FWT(A0)\operatorname{FWT}(A_0)FWT(A1)\operatorname{FWT}(A_1),如何求出 FWT(A)\operatorname{FWT}(A)

顺便定义函数 merge(A,B)\operatorname{merge}(A, B) 表示将序列 A,BA, B 直接前后拼接,返回拼接后的大序列。例如 A=merge(A0,A1)A = \operatorname{merge}(A_0, A_1)

或运算

考虑如何构造 FWT\operatorname{FWT} 的方式,使得:

FWT(AB)=FWT(A)FWT(B)(5) \operatorname{FWT}(A | B) = \operatorname{FWT}(A) \cdot \operatorname{FWT}(B) \qquad{(5)}

对于或运算卷积,直接给出结论。我们定义当前情况下的 FWT\operatorname{FWT} 的运算规则如下。

FWT(A)=merge(FWT(A0),FWT(A0)+FWT(A1))(6) \operatorname{FWT}(A) = \operatorname{merge}(\operatorname{FWT}(A_0), \operatorname{FWT}(A_0) + \operatorname{FWT}(A_1)) \qquad{(6)}

其中 ++ 为序列对应位置相加。

现在证明:已知 (eq.~eq. 6), (eq.~eq. 5) 成立。

FWT\operatorname{FWT} 简记为 F\operatorname{F},将 merge(A,B)\operatorname{merge}(A, B) 简记为 [A,B][A, B]

首先试图从等式左边开始推导: F(A)F(B)=[F(A0), F(A0)+F(A1)][F(B0), F(B0)+F(B1)]=[F(A0)F(B0), (F(A0)+F(A1))(F(B0)+F(B1))]=[F(A0)F(B0), F(A0)F(B0)+F(A0)F(B1)+F(A1)F(B0)+F(A1)F(B1)] \begin{split} \operatorname{F}(A) \cdot \operatorname{F}(B) &= \left[ \operatorname{F}(A_0),\ \operatorname{F}(A_0) + \operatorname{F}(A_1) \right] \cdot \left[ \operatorname{F}(B_0),\ \operatorname{F}(B_0) + \operatorname{F}(B_1) \right] \\ &= \left[ \operatorname{F}(A_0) \cdot \operatorname{F}(B_0),\ (\operatorname{F}(A_0) + \operatorname{F}(A_1)) \cdot (\operatorname{F}(B_0) + \operatorname{F}(B_1)) \right] \\ &= \left[ \operatorname{F}(A_0) \cdot \operatorname{F}(B_0),\ \operatorname{F}(A_0)\cdot\operatorname{F}(B_0) + \operatorname{F}(A_0)\cdot\operatorname{F}(B_1) \right. \\ &\quad\left. + \operatorname{F}(A_1)\cdot\operatorname{F}(B_0) + \operatorname{F}(A_1)\cdot\operatorname{F}(B_1) \right] \end{split}

再从等式右边开始推导,先假设当序列长度为 A2\frac{|A|}{2} 时,根据 (eq.~eq. 6) 能够使得 (eq.~eq. 5) 成立。 F(A  B)=F([A0B0,A0B1+A1B0+A1B1])=[F(A0B0), F(A0B1)+F(A1B0)+F(A1B1)+F(A0B0)]=[F(A0)F(B0), F(A0)F(B0)+F(A0)F(B1)+F(A1)F(B0)+F(A1)F(B1)] \begin{split} \operatorname{F}(A\ |\ B) &= \operatorname{F}([A_0|B_0, A_0|B_1 + A_1|B_0 + A_1 | B_1]) \\ &= \left[ \operatorname{F}(A_0|B_0),\ \operatorname{F}(A_0|B_1) + \operatorname{F}(A_1|B_0) + \operatorname{F}(A_1 | B_1) + \operatorname{F}(A_0|B_0) \right] \\ &= \left[ \operatorname{F}(A_0) \cdot \operatorname{F}(B_0),\ \operatorname{F}(A_0) \cdot \operatorname{F}(B_0) + \operatorname{F}(A_0) \cdot \operatorname{F}(B_1) + \operatorname{F}(A_1) \cdot \operatorname{F}(B_0) + \operatorname{F}(A_1) \cdot \operatorname{F}(B_1) \right] \end{split}

我们假设结论在 序列长度为 A2\frac{|A|}{2} 时 成立,能够推出 序列长度为 A|A| 时 成立,就能够推出上述结论在任何情况下均适用(数学归纳法)。

考虑如何构造逆变换 iFWT\operatorname{iFWT} 的运算规则。 相当于每一步都反向操作。

因为: FWT(A)=merge(FWT(A0),FWT(A0)+FWT(A1)) \operatorname{FWT}(A) = \operatorname{merge}(\operatorname{FWT}(A_0), \operatorname{FWT}(A_0) + \operatorname{FWT}(A_1)) 相当于,现在已经得到了 A0=A0A_0' = A_0A1=A0+A1A_1' = A_0 +A_1​ 那么易知: A0=A0 A_0 = A_0' A1=A1A0 A_1 = A_1' - A_0'

因此,逆变换就是: iFWT(A)=merge(iFWT(A0),iFWT(A1)iFWT(A0)) \operatorname{iFWT}(A)=\operatorname{merge}(\operatorname{iFWT}(A_0), \operatorname{iFWT}(A_1) - \operatorname{iFWT}(A_0))

需要注意的是: FWT(A)i=jiAj \operatorname{FWT}(A)_i = \sum_{j \subseteq i}A_j

与运算

FWT(A)=merge(FWT(A0)+FWT(A1),FWT(A1)) \operatorname{FWT}(A) = \operatorname{merge}(\operatorname{FWT}(A_0) + \operatorname{FWT}(A_1), \operatorname{FWT}(A_1)) iFWT(A)=merge(iFWT(A0)iFWT(A1),iFWT(A1)) \operatorname{iFWT}(A)=\operatorname{merge}(\operatorname{iFWT}(A_0) - \operatorname{iFWT}(A_1),\operatorname{iFWT}(A_1) )

需要注意的是: FWT(A)i=ijAj \operatorname{FWT}(A)_i = \sum_{i \subseteq j}A_j

一般方法

构造的逆运算为解方程。

考虑如何根据一种位运算,求出一种合法的 FWT/iFWT\operatorname{FWT} / \operatorname{iFWT} 构造方式。这里的合法指这种构造方式满足 (eq.~eq. 4)

考虑某种位运算 \oplusFWT\operatorname{FWT}​ 应该是什么样子。根据上面的两个例子,可以设出如下式子: F(A)=merge(aF(A0)+bF(A1) ,cF(A0)+dF(A1)) \operatorname{F}(A) = \operatorname{merge}(a \cdot\operatorname{F}(A_0) + b \cdot\operatorname{F}(A_1)\ ,c \cdot\operatorname{F}(A_0) + d \cdot\operatorname{F}(A_1) ) 这里的 a,b,c,da, b, c, d 为常数,“\cdot” 为普通乘法。

为了方便,设 U=F(A0)U=\operatorname{F}(A_0)V=F(A1)V=\operatorname{F}(A_1)W=F(B0)W=\operatorname{F}(B_0)X=F(B1)X=\operatorname{F}(B_1)

则:

F(A)F(B)=[aU+bV,cU+dV][aW+bX,cW+dX]=[a2UW+2ab(UX+VW)+b2VX,c2UW+2cd(UX+VW)+d2VX  ](7) \begin{split} \operatorname{F}(A)\cdot\operatorname{F}(B)&=[aU+bV, cU+dV]\cdot[aW+bX, cW+dX]\\\\ &=[a^2UW + 2ab(UX + VW)+b^2VX, c^2UW + 2cd(UX + VW)+d^2VX \ \ ] \end{split} \qquad{(7)}

这里以异或为例,因为序列是中间分成两个序列,不妨设序列长度均为 22 的若干次方,那么分开之后,其下标的最高位一定是前一半为 0 后一半为 1,根据异或的运算规则,哪些元素组合起来能够什么样的最高位即可。

假设上式在 序列长度为 A2\frac{|A|}{2}​ 时是成立的。则: F(AB)=F([A0B0+A1B1,A0B1+A1B0])=[aF(A0B0+A1B1)+bF(A0B1+A1B0),cF(A0B0+A1B1)+dF(A0B1+A1B0)]=[aF(A0B0)+aF(A1B1)+bF(A0B1)+bF(A1B0),cF(A0B0)+cF(A1B1)+dF(A0B1)+dF(A1B0)]=[aF(A0)F(B0)+aF(A1)F(B1)+bF(A0)F(B1)+bF(A1)F(B0),cF(A0)F(B0)+cF(A1)F(B1)+dF(A0)F(B1)+dF(A1)F(B0)]=[aUW+aVX+bUX+bVW , cUW+cVX+dUX+dVW] \begin{split} \operatorname{F}(A \oplus B)&=\operatorname{F}([A_0\oplus B_0 + A_1\oplus B_1, A_0\oplus B_1+A_1\oplus B_0])\\\\ &=[a\operatorname{F}(A_0\oplus B_0 + A_1\oplus B_1) + b\operatorname{F}(A_0\oplus B_1+A_1\oplus B_0), c\operatorname{F}(A_0\oplus B_0 + A_1\oplus B_1) + d\operatorname{F}(A_0\oplus B_1+A_1\oplus B_0)]\\\\ &=[a\operatorname{F}(A_0\oplus B_0) + a\operatorname{F}(A_1\oplus B_1) + b\operatorname{F}(A_0\oplus B_1)+b\operatorname{F}(A_1\oplus B_0),c\operatorname{F}(A_0\oplus B_0)+ c\operatorname{F}(A_1\oplus B_1) + d\operatorname{F}(A_0\oplus B_1)+d\operatorname{F}(A_1\oplus B_0)]\\\\ &=[a\operatorname{F}(A_0)\operatorname{F}(B_0) + a\operatorname{F}(A_1)\operatorname{F}(B_1) + b\operatorname{F}(A_0)\operatorname{F}(B_1)+b\operatorname{F}(A_1)\operatorname{F}(B_0),c\operatorname{F}(A_0)\operatorname{F}(B_0)+ c\operatorname{F}(A_1)\operatorname{F}(B_1) + d\operatorname{F}(A_0)\operatorname{F}(B_1)+d\operatorname{F}(A_1)\operatorname{F}(B_0)]\\\\ &=[aUW + aVX + bUX+bVW\ ,\ cUW+ cVX + dUX+dVW] \end{split}

和 (eq.~eq. 7) 对齐系数可以得到如下方程组: {a=a2a=b2b=2abc=c2c=d2d=2cd \begin{cases} a=a^2\\\\ a=b^2\\\\ b=2ab\\\\ c=c^2\\\\ c=d^2\\\\ d=2cd \end{cases} 解上面的方程组即可,显然有许多解。但是考虑到不仅需要 FWT\operatorname{FWT} ,还需要 iFWT\operatorname{iFWT}。有些解无法保证 iFWT\operatorname{iFWT} 能够存在解。

由: F(A)=merge(aF(A0)+bF(A1) ,cF(A0)+dF(A1)) \operatorname{F}(A) = \operatorname{merge}(a \cdot\operatorname{F}(A_0) + b \cdot\operatorname{F}(A_1)\ ,c \cdot\operatorname{F}(A_0) + d \cdot\operatorname{F}(A_1) )

X=aF(A0)+bF(A1)X = a \cdot\operatorname{F}(A_0) + b \cdot\operatorname{F}(A_1)Y=cF(A0)+dF(A1)Y = c \cdot\operatorname{F}(A_0) + d \cdot\operatorname{F}(A_1)。问题变成了已知 X,YX, Y,求出 F(A0),F(A1)\operatorname{F}(A_0), \operatorname{F}(A_1),可以解得: F(A1)=aYcXdabc \operatorname{F}(A_1) =\frac{aY - cX}{da-bc} F(A0)=dXbYdabc \operatorname{F}(A_0) =\frac{dX - bY}{da-bc} 因此上述方程组中,解还需要需要保证 adbcad \not = bc

可以解出一如下两组解: {a=1b=1c=1d=1 \begin{cases} a=1\\\\ b=-1\\\\ c=1\\\\ d=1 \end{cases} {a=1b=1c=1d=1 \begin{cases} a=1\\\\ b=1\\\\ c=1\\\\ d=-1 \end{cases}

上述两组解带入后都可以实现异或卷积。

质数表

来自 min_25的博客Orz

最长周期 nn 质数 原根 z(zn=1)z(z^n = 1) p1p-1的因数分解
2262^{26} 469762049 3 2187 226×72^{26} \times 7
2252^{25} 167772161 3 243 225×52^{25} \times 5
2242^{24} 754974721 11 739831874 224×32×52^{24} \times 3^2 \times 5
2232^{23} 377487361 7 48510621 223×32×52^{23} \times 3^2 \times 5
2232^{23} 595591169 3 361399025 223×712^{23} \times 71
2232^{23} 645922817 3 224270701 223×7×112^{23} \times 7 \times 11
2232^{23} 880803841 26 273508579 223×3×5×72^{23} \times 3 \times 5 \times 7
2232^{23} 897581057 3 872686320 223×1072^{23} \times 107
2232^{23} 998244353 3 15311432 223×7×172^{23} \times 7 \times 17
2222^{22} 104857601 3 39193363 222×522^{22} \times 5^2
2222^{22} 113246209 7 58671006 222×332^{22} \times 3^3
2222^{22} 138412033 5 99040867 222×3×112^{22} \times 3 \times 11
2222^{22} 155189249 6 14921912 222×372^{22} \times 37
2222^{22} 163577857 23 121532577 222×3×132^{22} \times 3 \times 13
2222^{22} 230686721 6 71750113 222×5×112^{22} \times 5 \times 11
2222^{22} 415236097 5 73362476 222×32×112^{22} \times 3^2 \times 11
2222^{22} 666894337 5 147340140 222×3×532^{22} \times 3 \times 53
2222^{22} 683671553 3 236932120 222×1632^{22} \times 163
2222^{22} 918552577 5 86995699 222×3×732^{22} \times 3 \times 73
2222^{22} 935329793 3 86363943 222×2232^{22} \times 223
2222^{22} 943718401 7 754500478 222×32×522^{22} \times 3^2 \times 5^2
2222^{22} 985661441 3 79986183 222×5×472^{22} \times 5 \times 47
2212^{21} 111149057 3 60767546 221×532^{21} \times 53
2212^{21} 132120577 5 102376994 221×32×72^{21} \times 3^2 \times 7
2212^{21} 136314881 3 2981173 221×5×132^{21} \times 5 \times 13
2212^{21} 169869313 5 143354861 221×342^{21} \times 3^4
2212^{21} 186646529 3 88383805 221×892^{21} \times 89
2212^{21} 199229441 3 174670364 221×5×192^{21} \times 5 \times 19
2212^{21} 211812353 3 113852926 221×1012^{21} \times 101
2212^{21} 249561089 3 61724276 221×7×172^{21} \times 7 \times 17
2212^{21} 257949697 5 186470816 221×3×412^{21} \times 3 \times 41
2212^{21} 270532609 22 74891632 221×3×432^{21} \times 3 \times 43
2212^{21} 274726913 3 255478716 221×1312^{21} \times 131
2212^{21} 383778817 5 324881819 221×3×612^{21} \times 3 \times 61
2212^{21} 387973121 6 124477810 221×5×372^{21} \times 5 \times 37
2212^{21} 459276289 11 238723101 221×3×732^{21} \times 3 \times 73
2212^{21} 463470593 3 428228038 221×13×172^{21} \times 13 \times 17
2212^{21} 576716801 6 153098993 221×52×112^{21} \times 5^2 \times 11
2212^{21} 597688321 11 395834143 221×3×5×192^{21} \times 3 \times 5 \times 19
2212^{21} 635437057 11 171402456 221×3×1012^{21} \times 3 \times 101
2212^{21} 639631361 6 432237000 221×5×612^{21} \times 5 \times 61
2212^{21} 648019969 17 592437138 221×3×1032^{21} \times 3 \times 103
2212^{21} 710934529 17 69533131 221×3×1132^{21} \times 3 \times 113
2212^{21} 715128833 3 355872337 221×11×312^{21} \times 11 \times 31
2212^{21} 740294657 3 237508734 221×3532^{21} \times 353
2212^{21} 786432001 7 228383098 221×3×532^{21} \times 3 \times 5^3
2212^{21} 799014913 13 374051146 221×3×1272^{21} \times 3 \times 127
2212^{21} 824180737 5 133412682 221×3×1312^{21} \times 3 \times 131
2212^{21} 899678209 7 118485495 221×3×11×132^{21} \times 3 \times 11 \times 13
2212^{21} 924844033 5 44009197 221×32×722^{21} \times 3^2 \times 7^2
2212^{21} 950009857 7 741494216 221×3×1512^{21} \times 3 \times 151
2212^{21} 962592769 7 695637473 221×33×172^{21} \times 3^3 \times 17
2212^{21} 975175681 17 518451017 221×3×5×312^{21} \times 3 \times 5 \times 31
2212^{21} 1004535809 3 702606812 221×4792^{21} \times 479
2212^{21} 1012924417 5 673144645 221×3×7×232^{21} \times 3 \times 7 \times 23