高斯整数学习笔记
# 高斯整数
实部与虚部都为整数的复数称为高斯整数,即
的范为,可证明
若为高斯整数,那么他们加、减、乘后仍是高斯整数(但除不一定)
下文中的希腊字母均代表高斯整数
为的共轭复数
若**整除**,是指存在高斯整数使得,例:,故
为高斯整数的单位,能整除任意高斯整数
对于,他的全部相伴为
# 高斯素数
定义:若非零高斯整数不是单位,而且只能够被单位和他的相伴整除,则称之为高斯素数(即恰有8个因子--4个单位和4个相伴)
# 定理1
若为有理素数,且,则是高斯素数,一定不是高斯素数
注:判断是否为高斯素数,即证明是否存在且或不为单位或的相伴
注2:存在(如:2)为有理素数但不是高斯素数的复数(因为)
# 定理2
为非零高斯整数,且不是单位,则
- 能够表示成一些高斯素数的乘积
- 该分解在某种意义上来说是唯一的
其中都是高斯素数,则有,且重新编号后可使得和是相伴的
# 定理3(通过高斯整数证明)
若有理素数型如,则可以表示为两个有理整数的平方和
与四平方和定理一起使用(?)
# 定理4
若为有理素数,则可按如下法则分解
- 若,则
- 若,则是高斯素数
- 若,则,其中和是不相伴的高斯素数,且
# 定理5
对于正整数
其中为的素数,为的素数,为非负整数,为非负偶数,那么有
种方法将表示为两个有理整数的平方和(此处次序不同或符号不同都被认为是不同的表示法)
引入:要求方程的解的个数,只需要计算分解成共轭高斯整数的乘积的方法数()
据说看这个视频 (opens new window)有助于理解该定理
# 例题 洛谷2508/BZOJ1041 (opens new window)
题目:求一个给定的圆的半径 ,在圆周上有多少个点的坐标是整数。
分析如下,令,出现在的分解中型如的素数一定成对出现,套用定理5的公式即可
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll r;
int main(){
cin >> r;
if(r == 0){cout<<1<<endl;return 0;}
ll ans = 1;
while(r % 2 == 0) r>>=1;
for(ll i=3; i*i<=r; i+=2){
ll cnt = 0;
while(r%i==0) cnt++, r/=i;
if(cnt > 0 && (i%4==1))
ans *= (cnt*2 + 1);
}
if(r > 1 && (r%4==1)) ans *= 3;
cout << (4 * ans) << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
恐怖如斯
# 参考
《初等数论及其应用》
上次更新: 2021/02/24, 03:37:30