本原勾股数组学习笔记
# 前置知识
高斯整数(推荐)
# 定义与性质
对于,且,那么定为一奇一偶,为奇数,我们约定为奇数,为偶数
每个本原勾股数组,都可以由一对互质的整数得出
该三角形的周长
下面证明必是平方数
设,则,即
因为,因此,又因为,因此互质。
进而有互质
因为为平方数,因此为平方数。
上述过程同时也证明了互质
# 其他性质
中有且仅有一个是3的倍数,不是3的倍数
中有且只有一个为5的倍数
# 例题
# 51nod 1165 (opens new window)
题目:直角三角形,三条边的长度都是整数。给出周长,求符合条件的三角形数量。
由于周长,且,那么我们可以遍历,可知,求出所有本原直角三角形
AC代码如下(关闭流同步后,耗时:375ms)复杂度: 近似
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e7 + 100;
int ans[maxn]={0}, t, n;
int main(){
ll limit = sqrt(maxn)+1, cir;
for(int s=3; s<=limit; s+=2){ // s为奇数
for(int t=1; t<s; t+=2){ // t为奇数
if(__gcd(s, t) != 1) continue;
cir = s*(s+t);
for(int k=1; k*cir<maxn; k++) ans[k*cir]++; // 计算贡献
}
}
cin >> t;
while(t--) {
cin >> n;
cout << ans[n] << '\n';
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 参考资料
上次更新: 2021/02/24, 03:37:30