《数论概论》读书笔记(第二章)勾股数组
来源:互联网 发布:吉首大学教务网络 编辑:程序博客网 时间:2024/05/26 05:53
本章主要讨论的是本原勾股数组,也就是关于满足
这章中提到一个概念:本原勾股数组(PPT)是一个三元组
对于本原勾股数组,显然
那么我们最关心的是如何求出所有的本原勾股数组。
如果将公式转化一下,得到
(反证法)证明:
如果
因此,如果将
本原勾股数公式:a=m²−n²,b=2mn,c=m²+n²
一些构造题和数论题会涉及:本原勾股数组。
例题:
http://codeforces.com/contest/707/problem/C
http://acm.hdu.edu.cn/showproblem.php?pid=3422
http://poj.org/problem?id=1305
习题解析:
(a) 反证法。假设
a 和b 都不是3的倍数,那么由于a 和b 的奇偶性不同,因此我想的方法是分成4种情况讨论:
由于a和b具有互换性,因此假定a 为奇数,b 为偶数。amod3=1,bmod3=1
那么a=6x+1,b=6y+4, 那么根据勾股定理,可以得到c=6z+5 的形式,再代入a2+b2=c2 后可得:36x2+12x+1+36y2+48y+16=36z2+60z+25
整理后可得3∗(12x2+4x+12y2+16y−12z2−20z)=8 。3 不是8 的因子,所以显然不存在整数x,y 使得该式成立。amod3=1,bmod3=2
那么有a=6x+1,b=6y+2, 那么可以得到c=6y+5 的形式,代入a2+b2=c2 后可得36x2+12x+1+26y2+24y+4=26y2+60z+25
整理后常数项20 也不是3 的因子,所以不存在整数x,y - 同理,可证明当
amod3=2,bmod3=1 和amod3=2,bmod3=2 中同样找不到x,y 成立,因此假设不成立,所以证明了a 或者b 必定是3 的倍数。
(b)根据上面的反证法也可以证明a 或b 或c 是5 的倍数。
证明:如果
d|m 和d|n ,则d|(m−n)且d|(m+n) 的证明。
很显然有m=ad,n=bd, 则m−n=d(a−b),m+n=d(a+b), 显然能够被d 整除。证明略。奇数和4的倍数可以出现在本原勾股数组中,而形如4n+2的偶数不可能出现在本原勾股数组中。
定理:如果x 和y 没有公约数,那么x2+y2 的任何奇素因子 都必定形如4n+1 .显然是存在相同
c 值的2 个本原勾股数组的。自己打个表就知道了。也可以找到相同c 值的4 个本原勾股数组。但找不到3个 (10,000,000内),可以找到4 个的,找不到5 个的,也找不到6 个的。。。
测试代码:
#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n;ll vis[10000000+7];ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}ll cot[100000000+7];int main(){ while(~scanf("%lld",&n))// <= 1,000,0000 { memset(vis,0,sizeof(vis)); int m=sqrt((double)n); ll ans=0; ll x,y,z; ll a,b,d; for(ll i=1;i<=m;i+=2) { for(ll j=2;j<=m;j+=2) { a=max(i,j); b=min(i,j); d=gcd(a,b); if(d==1) { x=a*a-b*b; y=2*a*b; z=a*a+b*b; cot[z]++; for(int k=1;k*z<=n;k++) { vis[x*k]=1; vis[y*k]=1; vis[z*k]=1; } if(z<=n) ans++; } } } printf("有%lld个本原勾股数组\n",ans); ans = 0; for(int i=1;i<=n;i++){ ans=max(ans,cot[i]); if(ans==2)cout<<"存在2个."<<endl; // if(ans==4)cout<<"存在4个"<<endl; // if(ans==5)cout<<"存在5个"<<endl; //if(ans==6)cout<<"存在6个"<<endl; } cout<<"(最大值)相同的有"<<ans<<"个."<<endl; } return 0;}
对于问题
首先,
观察可以找到规律:一个数是奇数,第二个数是
对于问题
- 《数论概论》读书笔记(第二章)勾股数组
- 数论概论第二章
- 数论概论笔记 第2章 勾股数组
- 《数论概论》读书笔记 第三章勾股数组与单位圆
- 数论概论笔记 第3章 勾股数组与单位圆
- 《数论概论》读书笔记(第一章) 什么是数论?
- 《数论概论》读书笔记 (第四章) 高次幂之和与费马大定理
- 《数论概论》读书笔记 第6章 线性方程与最大公约数
- 《数论概论》读书笔记 第23章 二次剩余
- 《数论概论》读书笔记 第5章 整除性与最大公因子数
- 操作系统概论知识理解(第二章)
- <虚拟化与云计算>读书笔记--第二章 虚拟化概论
- 读书笔记:《计算机系统概论》——第二章:bit、数据类型及其预算
- 数论概论笔记 第8章 同余式
- 数论概论笔记 第12章 素数
- 概论笔记(第二天)
- 计算机图形学第二章---概论(OpenGL简介)
- 数论之勾股数组(毕达哥拉斯三元组)
- shell变量计算长度及加减运算方法总结
- 1
- SLA by Short brain-Apr-2017
- 2
- jq桌面换肤效果
- 《数论概论》读书笔记(第二章)勾股数组
- ubuntu开启SSH服务
- Semaphore信号量使用
- JVM调优总结(五)-分代垃圾回收详述1
- VS2017无法进入安装界面问题的解决方法
- Java调用存储过程
- python-cookbook学习笔记八 迭代器与生成器一
- 初学数学建模软件MATLAB的笔记3
- 四川长牌算法