浅谈高斯素数([HAOI2008]圆上的整点)

前言

最近遇到了一道数学神题,是魔改的[HAOI2008]圆上的整点,我根本无从下手。

这道原题我是见过的,但当时以为高斯素数什么的应该基本不会考,故没去搞懂它。这道魔改题相当于是在原题基础上加了Min_25筛的进阶。

这两道题里面的一些结论很经典,而且是和我们熟知的勾股数相关的,所以我简单地讲讲。

(By the way,魔改者是陈YX

upd:搞错顺序了,应该先是徐YX在论文里把原题改成前缀和引出Min_25筛,再被陈YX二次魔改

从问题入手

给定 n n n,求以原点为圆心、半径为 n n n 的圆上有多少个整点。

由于对称性,我们可以只求第一象限加 x 轴正半轴上的整点数然后乘以4,所以我们相当于要求满足 a 2 + b 2 = n 2   ( a > 0 , b ≥ 0 ) a^2+b^2=n^2\,(a>0,b\ge 0) a2+b2=n2(a>0,b0) 的平面上点 ( a , b ) (a,b) (a,b) 的数量。

这个 a 2 + b 2 a^2+b^2 a2+b2 除了向量的模长,我们还可以怎么翻译呢?如果把一个向量表示到复数域内,那么模长就等于 z ⋅ z ˉ z\cdot \bar{z} zzˉ,也就是 ( a + b i ) ( a − b i ) (a+bi)(a-bi) (a+bi)(abi)。我们把这种 a a a b b b 都为整数的复数称为高斯整数(注意高斯整数不是整数是复数)。

于是问题就转化为把 n 2 n^2 n2 分解成 ( a + b i ) ( a − b i ) (a+bi)(a-bi) (a+bi)(abi) 即两个共轭高斯整数的方案数。

高斯素数

如果我们是求一个整数分解成两个整数相乘的方案的话,显然需要先把它质因数分解。这里我们可不可以也把 n n n 给分解成若干个不可分解的高斯整数相乘呢?

把一个数在高斯整数域上分解为若干个复数因子的乘积,这种分解式是唯一的,而其中每个因子在高斯整数上不能再分,这些因子也就是高斯素数

比如 5 = ( 2 + i ) ( 2 − i ) 5=(2+i)(2-i) 5=(2+i)(2i),而 2 + i 2+i 2+i 就不能再分了,所以 2 + i 2+i 2+i 是一个高斯素数。

你还需要注意到,把两个复数同时乘以-1,或一个乘以 i i i 一个乘以 − i -i i 时原式都是成立的。

显然某些素数不像5一样,不能分解成共轭复数的乘积,那么这些素数同时也是高斯素数。而合数一定不是高斯素数,因为它可以分解为整数的乘积。可见高斯素数和整数素数关联非常大。

所以我们不妨先把 n n n 做质因数分解,分解为素数的乘积,再把可以分解为高斯素数的素数分解。

费马平方和

哪些素数可以分解为高斯素数呢?

这里要用到费马平方和定理

奇素数 p p p 可以表示为两个正整数的平方和,当且仅当 p p p 4 k + 1 4k+1 4k+1 型的。并且在不考虑两个正整数顺序的情况下,这个表示方法唯一。

也就是说,当我们把所有素数分为3类: 2 2 2 4 k + 1 4k+1 4k+1 4 k + 3 4k+3 4k+3 时,任意一个 4 k + 1 4k+1 4k+1 型的素数都可以被唯一分解为 z ⋅ z ˉ z\cdot \bar{z} zzˉ,而所有 4 k + 3 4k+3 4k+3 型素数则不能被分解。特别地,我们会发现 2 = ( 1 + i ) ( 1 − i ) 2=(1+i)(1-i) 2=(1+i)(1i),也就是说 2 也不是高斯素数。

初步结论

对于一个数 n n n,我们可以把它质因数分解成如下形式:
n = 2 a ∏ p i   m o d   4 = 1 p i b i ∏ q j   m o d   4 = 3 q j c j n=2^a∏_{p_i\bmod 4=1}p_i^{b_i}∏_{q_j\bmod 4=3}q_j^{c_j} n=2apimod4=1pibiqjmod4=3qjcj
已知每个 p i p_i pi 可以分解为 z i ⋅ z i ˉ z_i\cdot \bar{z_i} ziziˉ,我们现在要求把 n n n 分解为共轭复数乘积的方案数,可以分别考虑这三部分的贡献:

  • 4 k + 3 4k+3 4k+3 型素数的贡献
    由于它不能被分解为共轭复数的乘积,所以只能以唯一一种方式对半分到共轭两边。这个时候如果存在一个因子 q j c j q_j^{c_j} qjcj c j c_j cj 不是偶数,那么直接完蛋,方案数为0。
  • 4 k + 1 4k+1 4k+1 型的贡献
    对于一个素数 p i p_i pi,它可以分解为 z i z_i zi z i ˉ \bar{z_i} ziˉ。我们把 z i z_i zi z i ˉ \bar{z_i} ziˉ 分到共轭两边,共有两种方案。
    更进一步,对于 p i b i p_i^{b_i} pibi,我们可以把 0 ∼ b i 0\sim b_i 0bi z i z_i zi 分到一边,其余分到另一边, z i ˉ \bar{z_i} ziˉ 对称分,那么就有 b i + 1 b_i+1 bi+1种方案。所以说一个 p i b i p_i^{b_i} pibi 对答案的贡献为 b i + 1 b_i+1 bi+1
    当然,我们可以注意到共轭两边交换过后等价,所以最终方案数貌似要除以2,但是别忘了,
    “在不考虑两个正整数顺序的情况下,这个表示方法唯一。”
    而除了 1 ± i 1±i 1±i 以外所有高斯素数的 a a a b b b 都是不同的,所以我们并没有考虑最终方案可以把 a , b a,b a,b 交换。也就是说,最终方案还要乘以2,抵消。
  • 2 的贡献
    由于一个 2 可以分解为 ( 1 + i ) ( 1 − i ) (1+i)(1-i) (1+i)(1i),所以我们肯定要把 ( 1 + i ) (1+i) (1+i) 乘到一边,把 ( 1 − i ) (1-i) (1i) 乘到另一边。但是有趣的一点是, ( 1 + i ) (1+i) (1+i) ( 1 − i ) (1-i) (1i) 的夹角为90°,所以两个方案会被计重。
    为什么呢?
    假设共轭两部分为 ( a + b i ) ( a − b i ) (a+bi)(a-bi) (a+bi)(abi),两个方案分别为 [ ( a + b ) + ( a − b ) i ] [ ( a + b ) − ( a − b ) i ] [(a+b)+(a-b)i][(a+b)-(a-b)i] [(a+b)+(ab)i][(a+b)(ab)i] [ ( a − b ) + ( a + b ) i ] [ ( a − b ) − ( a + b ) i ] [(a-b)+(a+b)i][(a-b)-(a+b)i] [(ab)+(a+b)i][(ab)(a+b)i],容易发现这就是把 ( a + b ) (a+b) (a+b) ( a − b ) (a-b) (ab) 交换的结果,这个在前面已经讨论过了,所以算同一种方案。
    由此得出,2 不应产生任何贡献。

综上,我们把所有贡献乘起来可以得到方案数为:
4 ⋅ ∏ ( b i + 1 )    [ 所 有 c j 为 偶 数 ] 4\cdot ∏(b_i+1)\,\,[所有c_j为偶数] 4(bi+1)[cj]

回到原题

原题要求的并不是 n n n 的分解而是 n 2 n^2 n2 的分解,
n 2 = 2 2 a ∏ p i   m o d   4 = 1 p i 2 b i ∏ q j   m o d   4 = 3 q j 2 c j n^2=2^{2a}∏_{p_i\bmod 4=1}p_i^{2b_i}∏_{q_j\bmod 4=3}q_j^{2c_j} n2=22apimod4=1pi2biqjmod4=3qj2cj
这样其实更方便了,因为 2 c j 2c_j 2cj 都是偶数,不用考虑提前西内的情况。总方案数为
4 ⋅ ∏ ( 2 b i + 1 ) 4\cdot ∏(2b_i+1) 4(2bi+1)
对于这道原题来说,用一次质因数分解就可以了。

更进一步

我们设 f ( n ) = ∏ ( 2 b i + 1 ) f(n)=∏(2b_i+1) f(n)=(2bi+1),那么根据定义发现,这个函数是个积性函数,是可以欧拉筛的。

n ≤ 1 0 7 n\le 10^7 n107,我们可以进行一次欧拉筛解决以下问题

  1. 求所有半径 ≤ n \le n n 的圆上整点数量的和。
  2. 求所有半径 ≤ n \le n n 的圆中,圆上整点数量恰好 m m m 个的圆有多少。

那如果 n ≤ 1 0 11 n\le 10^{11} n1011 呢?

第一个问题,就是求该函数的前缀和,可以用Min_25筛或州阁筛,详见国集2019论文,反正我是不会的。

第二个问题,就是我最开始提到的数学神题,这需要请教数学真的很厉害的巨佬们,我也是不会的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值