高斯素数判定

高斯素数及其判定方法

一、复数相关概念

1、定义:

​ 复数通常写为如下形式:

z = a + b i z = a + bi z=a+bi,

​ 其中 a 和 b 是实数,a 称为复数的实部 , b 称为复数的虚部 ,实数可以看为虚部为0的复数,对于实部为0而虚部不为0的复数称为纯虚数。

2 复平面:

​ 以纵轴为虚轴(对应一个复数的虚部),横轴为实轴(对应实部)建立平面直角坐标系,那么任意一个复数都可以表示为复平面上的一个点,同样,复平面上的一个点也对应一个复数。

图片描述

3、共轭:

(1)定义:

​ 对于复数 z = a + b i z = a + bi z=a+bi ,定义 z z z 的共轭为 z ˉ = a − b i \bar z = a - bi zˉ=abi .

(2)性质:
  1. z + w ‾ = z ˉ + w ˉ \overline{z+w}=\bar z + \bar w z+w=zˉ+wˉ
  2. z w ‾ = z ˉ w ˉ \overline{zw}=\bar z \bar w zw=zˉwˉ
  3. ∣ z w ∣ \left |\frac{z}{w} \right | wz = ∣ z ∣ ∣ w ∣ \frac{\left | z \right |}{\left | w \right |} wz

4、计算:

​ 设 z 1 = a 1 + b 1 i z_1 = a_1 + b_1i z1=a1+b1i z 2 = a 2 + b 2 i z_2 = a_2 + b_2i z2=a2+b2i ,则:

  • z 1 ± z 2 = ( a 1 ± a 2 ) + ( b 1 ± b 2 ) i z_1 \pm z_2 = (a_1 \pm a_2) + (b_1 \pm b_2)i z1±z2=(a1±a2)+(b1±b2)i , 在复平面中表示两个向量相加减。
  • z 1 × z 2 = ( a 1 × a 2 − b 1 × b 2 ) + ( a 1 × b 2 + a 2 × b 1 ) i z_1 \times z_2 = (a_1 \times a_2 - b_1 \times b_2) + (a_1 \times b_2 + a_2 \times b_1)i z1×z2=(a1×a2b1×b2)+(a1×b2+a2×b1)i , 在平面中, z 1 z 2 z_1z_2 z1z2的结果代表的向量为 z 1 , z 2 z_1,z_2 z1z2所代表的向量模长相乘,相角相加后得到的向量。
  • z 1 ÷ z 2 = z 1 × z ˉ 2 z 2 × z ˉ 2 z_1 \div z_2 = \frac{z_1 \times \bar z_2 }{z_2 \times \bar z_2} z1÷z2=z2×zˉ2z1×zˉ2 ,除法在复平面代表的含义与乘法恰好相反

5、模、范数:

​ 对于复数 z = a + bi , 定义 z 的模|z|为 : ∣ z ∣ = a 2 + b 2 \left | z \right | = \sqrt{a^2+b^2} z=a2+b2

​ 对于复数 z = a + bi , 定义 z 的范数 N ( z ) N(z) N(z)为: N ( z ) = z × N(z) = z \times N(z)=z× z ˉ \bar z zˉ

6、范数的性质(重点): N ( z 1 z 2 ) = N ( z 1 ) N ( z 2 ) N(z_1z_2) = N(z_1)N(z_2) N(z1z2)=N(z1)N(z2)

​ 证明:

设 z 1 = a 1 + b 1 i , z 2 = a 2 + b 2 i 设 z_1 = a_1 + b_1i ,z_2 = a_2 + b_2i z1=a1+b1i,z2=a2+b2i
则 z 1 × z 2 = ( a 1 a 2 + i 2 b 1 b 2 ) + ( a 1 b 2 + a 2 b 1 ) i 则 z_1 \times z_2 = (a_1a_2 + i^2 b_1b_2) + (a_1b_2 + a_2b_1)i z1×z2=(a1a2+i2b1b2)+(a1b2+a2b1)i
∴ N ( z 1 z 2 ) = ( a 1 a 2 + i 2 b 1 b 2 ) 2 − ( a 1 b 2 + a 2 b 1 ) 2 i 2 \therefore N(z_1z_2)\\=(a_1a_2+i^2b_1b_2)^2-(a_1b_2+a_2b_1)^2i^2 N(z1z2)=(a1a2+i2b1b2)2(a1b2+a2b1)2i2 = a 1 2 a 2 2 − i 2 a 1 2 b 2 2 − i 2 a 2 2 b 1 2 − i 4 b 1 2 b 2 2 \\=a_1^2a_2^2-i^2a_1^2b_2^2-i^2a_2^2b_1^2-i^4b_1^2b_2^2 =a12a22i2a12b22i2a22b12i4b12b22
∵ N ( z 1 ) = a 1 2 − b 1 2 ∗ i 2 , N ( z 2 ) = a 2 2 − b 2 2 i 2 \because N(z_1) = a_1^2 - b_1^2 *i^2 ,N(z_2)=a_2^2 - b_2^2 i^2 N(z1)=a12b12i2,N(z2)=a22b22i2
∴ N ( z 1 ) N ( z 2 ) = a 1 2 a 2 2 − i 2 a 1 2 b 2 2 − i 2 a 2 2 b 1 2 − i 4 b 1 2 b 2 2 \therefore N(z_1)N(z_2)= a_1^2a_2^2-i^2a_1^2b_2^2-i^2a_2^2b_1^2-i^4b_1^2b_2^2 N(z1)N(z2)=a12a22i2a12b22i2a22b12i4b12b22
∴ N ( z 1 z 2 ) = N ( z 1 ) N ( z 2 ) \therefore N(z_1z_2)=N(z_1)N(z_2) N(z1z2)=N(z1)N(z2)

很显然,上面这个性质不仅仅对 i = − 1 成立 , 对于 − 2 、 − 3 . . . . . . − n 也是成立的 很显然,上面这个性质不仅仅对 i=\sqrt{-1}成立,对于\sqrt{-2}、\sqrt{-3}......\sqrt{-n}也是成立的 很显然,上面这个性质不仅仅对i=1 成立,对于2 3 ......n 也是成立的 .

二、高斯整数

1、定义:

​ 实部和虚部都为实整数的复数,称为高斯整数 ,比如: 2 + 3 i , 1 + 2 i 2+3i,1+2i 2+3i,1+2i 等等,对应着复平面上的整点。

​ (若将 i = − 1 i=\sqrt{-1} i=1 ,替换为 i = − k i=\sqrt{-k} i=k ,这样的数也叫高斯整数,但不一定满足整数唯一分解定理,现如今数学家们已经证明当且仅当 k = 1 , 2 , 3 , 7 , 11 , 19 , 67 , 163 k=1,2,3,7,11,19,67,163 k=1,2,3,7,11,19,67,163 时整数唯一分解定理成立)

2、高斯整数中的单位:

​ 对于一个高斯整数 ε \varepsilon ε ,若 N ( ε ) = 1 N(\varepsilon )=1 N(ε)=1 ,则称 ε \varepsilon ε 为单位 ( 相当于整数中的1 ),显然,对于 i = − 1 i=\sqrt{-1} i=1 的情况,单位只有: ± 1 , ± i \pm1,\pm i ±1,±i

3、相伴:

ε z \varepsilon z εz 称为 z z z 的相伴.

4、整除:

​ 对于高斯整数 z z z,若存在高斯整数 α 和 β \alpha 和 \beta αβ 使得 α β = z \alpha \beta = z αβ=z,则称 α \alpha α 整除 z z z ,记作 α ∣ z \alpha | z αz.

5、高斯整数的取模运算:

​ 我们知道,实整数之间是可以进行取模运算的,那么高斯整数能否进行取模运算呢?答案是肯定的:

​ 运算规则如下:

z m o d    p = z − ⌊ z p ⌋ × p z\mod p = z- \left \lfloor \frac{z}{p} \right \rfloor \times p zmodp=zpz×p

三、高斯素数:

1、定义:

​ 对于 非 0 0 0 高斯整数 π , 若 π ≠ ε \pi,若\pi \ne \varepsilon π,π=ε,且 π \pi π 只能被 ε \varepsilon ε 及其相伴整除,那么称 π \pi π 为高斯素数。

2、性质:

​ 若 π 为高斯素数,则: \pi 为高斯素数,则: π为高斯素数,则:

​ 1、 π ˉ 为高斯素数 \bar\pi为高斯素数 πˉ为高斯素数

​ 证明: 假设 π ˉ 不是高斯素数 假设\bar\pi不是高斯素数 假设πˉ不是高斯素数

那么存在不为单位的高斯整数 α , β , 使得 π ˉ = α β 那么存在不为单位的高斯整数\alpha ,\beta ,使得\bar \pi = \alpha \beta 那么存在不为单位的高斯整数α,β,使得πˉ=αβ

那么, π = α ˉ β ˉ , 其中 α ˉ 、 β ˉ 均不是单位 那么,\pi = \bar \alpha \bar \beta,其中\bar \alpha 、\bar \beta 均不是单位 那么,π=αˉβˉ,其中αˉβˉ均不是单位

这与 π 是高斯素数矛盾 这与\pi是高斯素数矛盾 这与π是高斯素数矛盾

故假设不成立, π ˉ 是高斯素数 故假设不成立,\bar \pi 是高斯素数 故假设不成立,πˉ是高斯素数

​ 2、 ε π 也是高斯素数 ( 证明与 1 类似,略 ) \varepsilon\pi也是高斯素数(证明与1类似,略) επ也是高斯素数(证明与1类似,略)

3、整数唯一分解定理的拓展:

​ 和整数的唯一分解定理一样,高斯整数也有唯一分解定理,即高斯整数 也可以分解成若干高斯素数相乘,且分解结果唯一(在不考虑相伴的情况下)。

分解的方法我们在后面给出(先挖个坑)。

4、高斯素数和整数素数的联系(费马二平方定理):

  • ​ 首先,整数中的合数一定不是高斯素数

  • ​ 整素数不一定是高斯素数: 2 = ( 1 − i ) × ( 1 + i ) , 5 = ( 2 − i ) × ( 2 + i ) 2 = (1-i) \times (1+i),5=(2-i)\times(2+i) 2=(1i)×(1+i),5=(2i)×(2+i)

​ 那么,什么整数素数是高斯素数呢?接下来,我们介绍一下费马二平方和定理。

费马二平方定理:
引子:

在介绍这个定理之前,让我们想一下,若一个素数p 能被分解成两个非0,且非单位的高斯整数 z 1 , z 2 z_1,z_2 z1,z2相乘,那么 z 1 , z 2 z_1,z_2 z1,z2应该满足什么条件呢?

答: z 1 , z 2 z_1,z_2 z1,z2要共轭.

让我们来证明一下:


z 1 = a 1 + b 1 i , z 2 = a 2 + b 2 i ,且 ∣ a 1 ∣ > = ∣ a 2 ∣ z_1 = a_1 + b_1i,z_2= a_2 + b_2i,且 |a_1|>=|a_2| z1=a1+b1i,z2=a2+b2i,且a1>=a2.

那么为了使 z 1 , z 2 z_1,z_2 z1,z2的乘积中的虚部为0,必然有 a 1 a 2 = − b 1 b 2 \frac{a_1}{a_2}=-\frac{b_1}{b_2} a2a1=b2b1

所以 a 1 a 2 a_1a_2 a1a2 b 1 b 2 b_1b_2 b1b2 异号 。

所以为了让 乘积的实部 a 1 a 2 + i 2 b 1 b 2 > 0 a_1a_2+i^2b_1b_2>0 a1a2+i2b1b2>0, a 1 , a 2 a_1,a_2 a1,a2 要同号

我们 设 a 1 a 2 = t \frac{a_1}{a_2}=t a2a1=t >=1,t为实整数.

z 1 = t ( a 2 − b 2 i ) = t z ˉ 2 z_1 = t(a_2-b_2i)=t\bar z_2 z1=t(a2b2i)=tzˉ2

那么 p = t ( a 2 2 − i 2 b 2 2 ) p = t (a_2^2-i^2b_2^2) p=t(a22i2b22),其中 ( a 2 2 − i 2 b 2 2 ) < = p (a_2^2-i^2b_2^2)<=p (a22i2b22)<=p

接下来,我们证明 t = 1(即证明 a 2 2 − i 2 b 2 2 = p ) a_2^2-i^2b_2^2=p) a22i2b22=p);

( a 2 2 − i 2 b 2 2 ) < p (a_2^2-i^2b_2^2)<p (a22i2b22)<p

t = p a 2 2 − i 2 b 2 2 t = \frac{p}{a_2^2-i^2b_2^2} t=a22i2b22p,由于 p p p是质数,且 ( a 2 2 − i 2 b 2 2 ) < p (a_2^2-i^2b_2^2)<p (a22i2b22)<p,所以分子分母互质

a 1 = a 2 × t = a 2 × p a 2 2 − i 2 b 2 2 a_1 = a_2 \times t=a_2 \times \frac{p}{a_2^2-i^2b_2^2} a1=a2×t=a2×a22i2b22p

所以,要使 a 1 a_1 a1是整数,只有当 a 2 a_2 a2 ( a 2 2 − i 2 b 2 2 ) (a_2^2-i^2b_2^2) (a22i2b22)的倍数时才成立,显然,对于非单位高斯整数来说,这是不可能的

所以 a 2 2 − i 2 b 2 2 = p a_2^2-i^2b_2^2=p a22i2b22=p.

所以 t = 1 t = 1 t=1;

所以 z 1 , z 2 z_1,z_2 z1,z2共轭.

(注意到,我们的推导 z 1 , z 2 z1,z2 z1,z2共轭这个结论时并没有使用到 i 2 = − 1 i^2=-1 i2=1这个条件,所这个结论可以推广到 i = − k i = \sqrt{-k} i=k 的情况。)


内容:

​ 奇素数 p p p 能表示成 a 2 2 + b 2 2 ⇔ p ≡ 1 ( m o d 4 ) a_2^2+b_2^2 \Leftrightarrow p \equiv 1(mod 4) a22+b22p1(mod4)

根据这个定理和我们的引子,我们可以知道: ( 4 K + 1 ) (4K+1) (4K+1) 型素数不是高斯素数,而 ( 4 k + 3 ) (4k+3) (4k+3) 型素数一定是高斯素数.

5、分解 ( 4 k + 1 ) (4k+1) (4k+1) 型素数 p p p 的方法:

​ 1、枚举 1 1 1 p \sqrt{p} p 的所有整数,找出一个符合条件的即可。

6、高斯素数判定的充分必要条件:

​ 设 z = a + b i z = a + b i z=a+bi ,当且仅当 z z z 满足下述条件之一时, z z z 是一个高斯素数:

​ 1、 a = 0 a=0 a=0 b b b 4 k + 3 4k+3 4k+3 型素数

​ 2、 b = 0 b=0 b=0 , a a a 4 k + 3 4k+3 4k+3 型素数

​ 3、 a a a, b b b 均不为 0 0 0 N ( z ) N(z) N(z) 是素数

​ 1、2比较显然,我们对3做出证明:

​ …

先证明充分性:即证明 : N ( z ) = p N(z)=p N(z)=p, p p p 是素数 ⇒ z \Rightarrow z z 是高斯素数

​ 假设z不是高斯素数,则存在非零且非单位高斯整数 α , β \alpha ,\beta α,β 使得 α β = z \alpha \beta=z αβ=z

​ 那么根据范数的性质得: N ( z ) = N ( α ) N ( β ) = p N(z)=N(\alpha)N(\beta)=p N(z)=N(α)N(β)=p ,其中 N ( α ) N(\alpha) N(α), N ( β ) N(\beta) N(β)是大于1得整数.这与 p p p 是素数矛盾

​ 故假设不成立,所以 z z z 是高斯素数.

​ (证到这里,我们结合之前介绍费马平方和定理时给出的引子,就可以得出一个结论,由整素数分解成的两个 高斯整数(如果该整素数本身不是高斯素数的话),必然共轭且为高斯素数。)

​ **再证明必要性:**即证明: z z z 是高斯素数 ⇒ N ( z ) \Rightarrow N(z) N(z) 素数。

​ 设 N ( z ) = z z ˉ = p 1 × p 2 × p 3 × . . . × p n N(z)=z\bar z=p_1\times p_2\times p_3 \times...\times p_n N(z)=zzˉ=p1×p2×p3×...×pn p i p_i pi 为整素数( i = 1 , 2 , 3... n i=1,2,3...n i=1,2,3...n )。

​ 由于 z z z 是高斯素数,且 z ∣ N ( z ) z|N(z) zN(z) ,所以 z z z N ( z ) N(z) N(z) 在复数范围内分解质因子的一部分。

​ 所以 z z z 是由 N ( z ) N(z) N(z) 在完成整数质因子分解后,进一步将一些不是高斯素数的整素数分解成高斯素数后得到的。

​ 所以存在且仅存在一个 p i p_i pi,使得 z ∣ p i z|p_i zpi

​ 根据介绍费马平方和定理时给出的引子,我们知道素数 p i p_i pi若能表示成两个高斯整数的乘积,则这两个高斯整数共 轭且为高斯素数。

​ 所以, z z ˉ = p i z\bar z=p_i zzˉ=pi, 即 N ( z ) = p i N(z)=p_i N(z)=pi ,必要性得证。

(对3的证明并没有用到 i 2 = − 1 i^2 = -1 i2=1 这个条件,所以3可以推广到 i = − k i = \sqrt{-k} i=k 的情况)

7、在复数范围内将实整数分解成高斯质因数得方法

​ 根据上面六部分内容,我们可以总结出:

  1. ( 4 k + 3 ) (4k+3) (4k+3) 型的素数是高斯素数。
  2. ( 4 k + 1 ) (4k+1) (4k+1) 型的可以分解为两个共轭的高斯素数。

​ 所以,要将一个整数分解成若干个高斯素数相乘,只要先将其分解成实实质因数,再将 ( 4 k + 1 ) (4k+1) (4k+1) 型的素数分解成对应得高斯素数即可即可。

​ (注意,这个方法并不能推广到 i = − k i=\sqrt{-k} i=k 得情况,因为费马二平方定理是 素数 p = a 2 + b 2 ⇔ p ≡ 1 ( m o d 4 ) p = a^2+b^2 \Leftrightarrow p \equiv 1(mod 4) p=a2+b2p1(mod4) ,而不是 p = a 2 − i 2 b 2 ⇔ p ≡ 1 ( m o d 4 ) p=a^2-i^2b^2\Leftrightarrow p \equiv 1(mod 4) p=a2i2b2p1(mod4)

8、将高斯素数的判定推广到 i = − k i = \sqrt{-k} i=k , ( k > 1 ) (k>1) (k>1)

​ 那么对于 形如 z = a + b − k z = a + b\sqrt{-k} z=a+bk 的高斯整数,如何判定 它是不是高斯素数呢?

  1. a = 0 a = 0 a=0 时,当且仅当 b = 1 b=1 b=1 时, z z z 是高斯素数。
  2. a ≠ 0 a \ne 0 a=0, b = 0 b = 0 b=0 时,判断 a a a 能否被表达成 t ( x 2 + k y 2 ) t (x^2 + k y^2) t(x2+ky2) 的形式(可以通过上面证明的引子来证明)。
  3. ​ a,b均不为 0 0 0时,只要判断 N ( z ) N(z) N(z) 是不是素数即可。

四、例题

1、uva 1415 - Gauss Prime

​ 题意:
​ 给出一个高斯整数: z = a + b − 2 z = a + b \sqrt{-2} z=a+b2 ,保证 ( a ≥ 0 (a \ge 0 (a0, b > 0 ) b>0) b>0)

​ 判断 z z z 是不是 高斯素数,是则输出“Yes",否则输出”No"。

​ 解析:

a = 0 a = 0 a=0 时,仅当 b = 1 b = 1 b=1 时输出”Yes" (然而这样会 wa,改成 a = 0 a=0 a=0 则输出“No”就过了,感觉这题怪怪的,圈红的地方又说 − k \sqrt{-k} k 是高斯素数)。

a ≠ 0 a \ne 0 a=0 时,判断 a 2 + 2 b 2 a^2+2b^2 a2+2b2 是不是素数即可。

#include<iostream>

using namespace std;

int n,a,b,temp;

bool check(int x)
{
    for(int i=2;i<=x/i;i++)
    {
        if(x%i==0)return false;
    }
    return true;
}

int main()
{
    cin>>n;
    while(n--)
    {
      	cin>>a>>b;
        if(a==0)
        {
            if(b==1)cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
            //改成 cout<<"No"<<endl,才能ac
        }
        else 
        {
            temp = a*a + 2*b*b;
            if(check(temp))cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
	return 0;
}

2、洛谷 2508 圆上的整点数:

贴上一个很好的视频链接(这个视频真的讲的非常好):官方双语

思路: x 2 + y 2 = r 2 ⟺ ( x + y i ) ( x − y i ) = r 2 x^2+y^2=r^2\Longleftrightarrow (x+yi)(x-yi)=r^2 x2+y2=r2(x+yi)(xyi)=r2

相当于让我们计算有多少对共轭高斯整数的乘积是 r 2 r^2 r2

复习一下共轭的一个性质: z w ‾ = z ˉ w ˉ \overline{zw}=\bar z \bar w zw=zˉwˉ

那么,怎么才能计算所有符合条件的共轭对的数量呢?

实际上,我们可以把 r 2 r^2 r2 在复数范围内分解成一系列高斯素数的乘积,在不考虑相伴的情况下,这种分 解是唯一的。

我们假设 r = 2 n ∏ i = 1 i = m p i k i ∏ j = 1 j = n q j r j r = 2^n \prod_{i=1}^{i=m}p_i^{k_i} \prod_{j=1}^{j=n}q_j^{r_j} r=2ni=1i=mpikij=1j=nqjrj

其中 p i p_i pi ( 4 k + 1 ) (4k+1) (4k+1) 型素数, q j q_j qj ( 4 k + 3 ) (4k+3) (4k+3) 型素数,那么每个 p i p_i pi 都可以分解为一对共轭复数,

所以 r = ( 1 − i ) n ( 1 + i ) n ∏ i = 1 i = m z i k i z ˉ i k i ∏ j = 1 j = n q j r j r = (1-i)^n(1+i)^{n}\prod_{i=1}^{i=m}z_i^{k_i}\bar z_i^{ki}\prod_{j=1}^{j=n}q_j^{r_j} r=(1i)n(1+i)ni=1i=mzikizˉikij=1j=nqjrj

所以 r 2 = ( 1 − i ) 2 n ( 1 + i ) 2 n ∏ i = 1 i = m z i 2 k i z ˉ i 2 k i ∏ j = 1 j = n q j 2 r j r^2 = (1-i)^{2n}(1+i)^{2n}\prod_{i=1}^{i=m}z_i^{2k_i}\bar z_i^{2ki}\prod_{j=1}^{j=n}q_j^{2r_j} r2=(1i)2n(1+i)2ni=1i=mzi2kizˉi2kij=1j=nqj2rj

我们要计算满足 r 2 = z z ˉ r^2 = z\bar z r2=zzˉ 的共轭对有多少种,也就是计算 r 2 r^2 r2 的素因子有多少种不同的分配方式可以将 素因子分配到两边,使得两边的乘积是一个共轭对。

我们先来看一个例子:

r = 5

那么 r 2 = 25 = ( 5 ∗ 5 ) = ( 1 + 2 i ) 2 ( 1 − 2 i ) 2 r^2=25=(5*5)=(1+2i)^2(1-2i)^2 r2=25=(55)=(1+2i)2(12i)2

我们得到了一种由(4k+1)型素数5分解得到得共轭对(1,2),(1,-2),共有两组:

第一种分配方案:(1,-2)全在右边。

(1,2) (1,-2) 共轭,

(1,2) (1,-2) 共轭,


(-3,4) (-3,-4)共轭,

第二种分配方案:一个(1,-2)在右边,相当于第一种方案交换第一行两边的数,

(1,-2) (1,2) 共轭,

(1,2) (1,-2) 共轭,


(5,0) (5,0) 共轭,

第三种分配方案:0个(1,-2)在右边,相当于第二种方案再交换第二行两边的数,

(1,-2) (1,2) 共轭,

(1,-2) (1,2) 共轭,


(-3,-4) (-3,4) 共轭,

这三种方案分别对应圆上(-3,4),(-3,-4),(5,0)这三个点。

但是,这就是所有的点了吗?

并不是,如果我们给每个结果的左边乘上 i i i,右边乘上 − i -i i,我们将再次得到三个点:

(-4,-3),(4,-3),(0,5)

如果左边乘上 − i -i i,右边乘上 i i i,我们也将再次得到三个点:

(4,3),(-4,3),(0,-5)

如果左边乘上 − 1 , 右边乘上 -1,右边乘上 1,右边乘上 − 1 -1 1,我们也将再次得到三个点:

(3,-4),(3,4),(-5,0)

让我们回忆一下,复数乘法在复平面的几何意义:模长相乘,相位角相加,而

(1,0),(0,1),(0,-1),(-1,0)的模长都是1,相位角分别是0, π / 2 , π , 3 π / 2 \pi/2,\pi,3\pi/2 π/2,π,3π/2.

那么我们上面三种操作就相当于将一开始的三个点分别旋转90°,180°,270°。只要我们一开始取到 的点不存在夹角为90°,180°,270°的两个点,那么就不会重复。

我们再来看一个例子:

r 2 r^2 r2 = 5 * 5 * 3 * 3 = (1-2i) (1+2i) 3 .

这里多了一个无法继续分解的 ( 4 k + 3 ) (4k+3) (4k+3) 型素数 3,由于整数的共轭还是它本身,所以我们分配3的时候,无论怎么交换3及其共轭,都不会产生新的结果,我们只要保证左右两边3的个数相同即可,所以3并没有对我们的结果做出贡献,所以半径为 5 ∗ 3 5*3 53的圆上也只有 3 × 4 = 12 3\times4=12 3×4=12个点。

我们再看一个例子:

r 2 = 2 ∗ 2 = ( 1 − i ) 2 ( 1 + i ) 2 r^2=2*2=(1-i)^2(1+i)^2 r2=22=(1i)2(1+i)2

接下来我们来分配共轭对 ( 1 , − 1 ) , ( 1 , 1 ) (1,-1),(1,1) (11)(11)

第一种方案:

(1,-1) (1,1) 共轭

(1,-1) (1,1) 共轭


(0,2) (0,-2) 共轭

第二种方案:

(1,1) (1,-1) 共轭

(1,-1) (1,1) 共轭


(2,0) (2,0) 共轭

第三种方案:
(1,1) (1,-1) 共轭

(1,1) (1,-1) 共轭


(0,-2) (0,2) 共轭

这样,我们的得到了三个点:(0,2)、(0,-2)、(2,0),这三个点有点特殊,他们之间的夹角分别是90°,180°,270°。也就是说,这三个点中得两个点可以由另外一个点乘上单位(i,-i,-1,1)得到,也就是说,我们交换左右两边的(1,-1),(1,1)产生的效果与我们最后对结果乘上单位的效果是一样的,所以我们把2的分配方案视为1,因为无论如何我们最后都可以对结果乘上单位,已经包含了2能产生的所有效果。但是,有没有其他的高斯素数交换共轭对对结果产生的影响与乘上单位产生的影响一样呢?显然是没有的(留给读者自证)。

最后,我们再来看一个例子:

r 2 = 3 2 × 5 2 × 2 2 × 1 7 2 r^2= 3^2\times 5^2 \times 2^2\times 17^2 r2=32×52×22×172

对3进行分配,每种方案都相同,故对3只有一种分配方案(注意,如果3只有奇数个,方案为0,但是 r 2 r^2 r2 作为一个平方数,每个整数质因子必然有偶数个).

对 5 分解出来的共轭对 (1,2),(1,-2)分配,由于有两组(1,2)、(1,-2),我们一共有3种分配方案(左边分配0、1、2个(1,2))。

对17也是一样的,有3种分配方案(因为5和17的次数相同)

对于2,他对结果并无贡献,方案记为1。

所以方案总数为:3 × 3 = 9 \times 3 = 9 ×3=9 种,每种方案都对应一个点,最后每个点乘上单位(i,-i,1,-1) 又会得到3个新 的点,所以我们的总共又 9x4 = 36个点。

所以对于 r 2 = ( 1 − i ) 2 n ( 1 + i ) 2 n ∏ i = 1 i = m z i 2 k i z ˉ i 2 k i ∏ j = 1 j = n q j 2 r j r^2 = (1-i)^{2n}(1+i)^{2n}\prod_{i=1}^{i=m}z_i^{2k_i}\bar z_i^{2ki}\prod_{j=1}^{j=n}q_j^{2r_j} r2=(1i)2n(1+i)2ni=1i=mzi2kizˉi2kij=1j=nqj2rj,

r = ( 1 − i ) n ( 1 + i ) n ∏ i = 1 i = m z i k i z ˉ i k i ∏ j = 1 j = n q j r j r = (1-i)^n(1+i)^{n}\prod_{i=1}^{i=m}z_i^{k_i}\bar z_i^{ki}\prod_{j=1}^{j=n}q_j^{r_j} r=(1i)n(1+i)ni=1i=mzikizˉikij=1j=nqjrj 的情况:

我们的点一共有 a n s = 4 ∗ ∏ i = 1 2 ∗ k i + 1 ans = 4* \prod_{i=1}^{2*k_i+1} ans=4i=12ki+1 ,

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long 

using namespace std;
int r;
int ans=1;
signed main()
{
    cin>>r;
    for(int i=2;i<=r/i;i++)
    {
        if(r%i==0)
        {
            int s=0;
            while(r%i==0)
            {
                s++;
                r/=i;
            }
            if(i==2||i%4==3)s=0;
            ans *= (2*s+1);
        }
    }
    if(r>1&&r%4==1)ans *=3;
    cout<<4*ans;
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值