勾股数组【学习笔记】
本原勾股数组(简写为PPT)是一个三元组(a,b,c),其中a,b,c没有公因数,且满足a^2 + b^2 = c^2。例如下面是一项本原勾股数组:
(3,4, 5),(5,12,13),(8,15,17),(7,24,25),(9,40,41),(11,60,61),(28,45,56),(33,56,65)。
由这个短表容易得到一些结论,例如,似乎a与b奇偶性不同且c总是奇数。
证明如下:
若a与b都是偶数,则c也是偶数,意味着a,b,c有公因数2,所以三元组不是本原的,其次,若a,b都是奇数,那么c必然是偶数,这样假设a=2x+1,b=2y+1,c=2z,代入a^2 + b^2 = c^2,化简后得2x^2 + 2x + 2y^2 + 2y + 1 = 2z,显然不成立。所以,考虑到a,b的互换性,我们得出a是奇数,b是偶数,a,b,c没有公因数。
接着观察如下,如果(a,b,c)是本原勾股数组,则可进行因数分解:
a^2 = c^2 – b^2 = (c - b) * (c + b)
下面为举例:
3^2 = 5^2 - 4^2 = (5-4)(5+4) = 1 * 9,
15^2 = 17^2 - 8^2 = (17-8)(17+8) = 9 * 25,
21^2 = 29^2 - 20^2 = (29-20)(29+20) = 9 * 49。
我们发现似乎c - b与c + b本身总是平方数,如何证明呢?
由前面观察,c – b与c + b似乎没有公因数,证明如下:
假设正整数d是c-b与c+b的公因数,则d也整除(c - b) + ( c + b) = 2c 和 (c + b) - (c - b) = 2b,但是b和c没有公因数,所以d = 1或d = 2,但是d也整除(c - b)* (c + b) = a^2,因为a是奇数,所以只能是d = 1,所以c - b与c + b没有公因数。
现在我们知道c-b与c+b无公因数并且相乘为平方数,所以c-b与c+b自身都是平方数,记:
c + b = s^2, c – b = t^2, 其中s> t≥1是没有公因数的奇数。所以解为:
b = (s^2 - t^2)/ 2,
c = (s^2 + t^2)/ 2,
a = s * t.
从而得出勾股数组定理:
每个本原勾股数组(a,b,c)(其中a为奇数,b为偶数)都可从如下公式得出:
a = s * t,b = (s^2 - t^2)/ 2, c = (s^2 + t^2)/ 2。
其中a>t≥1是任意没有公因数的奇数。
如果取t=1,则三元组(s, (s^2 - 1)/ 2, (s^2 + 1)/ 2),它的b与c值仅相差1.
今天正好做了一道有关的题:
题目链接:codeforces 707C. Pythagorean Triples
题意:给出一个数,构造勾股数。
题解:
a≤2时无解;
a为奇数时,直接用上面取t = 1的公式得b = (a^2 - 1)/ 2, c = (a^2 + 1)/ 2;
a为偶数时,当a = 4 *d时,直接可以套勾股数(3,4,5),从而b= 3 *d, c = 5 * d,
对于其他的偶数a,可以a = a/ 2, 将a化为奇数,再直接用上面公式即可.
1 #include<cstdio> 2 int main(){ 3 long long a; 4 scanf("%I64d", &a); 5 if(a == 1 || a == 2) 6 printf("-1\n"); 7 else if(a % 4 == 0){ 8 printf("%I64d %I64d\n", a/4*3, a/4*5); 9 } 10 else if(a % 2 == 0){ 11 a /= 2; 12 printf("%I64d %I64d\n", (a*a-1)/2*2, (a*a+1)/2*2); 13 } 14 else 15 printf("%I64d %I64d\n", (a*a-1)/2, (a*a+1)/2); 16 return 0; 17 }
转载于:https://www.cnblogs.com/GraceSkyer/p/5847338.html
勾股数组【学习笔记】相关推荐
- java如何找出勾股数组_勾股数组 学习笔记
题目大意是给出各条边都是正整数的直角三角形的一条边长,求另外两条边可能的一种方案. 除了爆搜脑子一片空白,然后就很没志气的看了题解,提到了勾股数组,于是学习了一下.网络上的资料感觉证明不是详细,所以自 ...
- 勾股数组 学习笔记
颓废了一个暑假,想做点CF提高一下智商,然后就被这题卡住了. http://codeforces.com/contest/707/problem/C 题目大意是给出各条边都是正整数的直角三角形的 ...
- 《数论概论》读书笔记(第二章)勾股数组
本章主要讨论的是本原勾股数组,也就是关于满足a2+b2=c2a^2+b^2=c^2的三元组(a,b,c)(a,b,c),且(a,b,c)(a,b,c)互质的问题. 这章中提到一个概念:本原勾股数组(P ...
- 数论概论笔记(二)勾股数组
毕达哥拉斯定理(即勾股定理) a2+b2=c2a^2+b^2=c^2a2+b2=c2 显然勾股数组有无穷个,对存在的勾股数组每个数乘上一个正整数d即可得到新的勾股数组. 因此我们关注两两互质的三元组, ...
- 数论概论读书笔记 2.勾股数组
勾股数组 本原勾股数组是一个三元组(a,b,c) 其中a,b,c没有公因数,且满足 a2+b2=c2a2+b2=c2 a^2+b^2=c^2 定理2.1 (勾股数组定理). 每个本原勾股数组(a,b, ...
- matlab毕达哥拉斯质数,“毕达哥拉斯-史仲夏”常用勾股数组表
毕达哥拉斯方程:(2uv)^2+(u^2-v^2)^2=(u^2+v^2)^2 求证勾股数组的规律: 1.uv=质数:只有一组勾股数组. 2.u^2+v^2=u^2-v^2+2v^2. 只要掌握了这两 ...
- URAL 2032 - Conspiracy Theory and Rebranding【本源勾股数组】
[题意] 给出三角形的三个边长,均是10^7以内的整数,问三角形的三个角的坐标是否能均是整数,输出其中任意一个解. [题解] 一开始想的是枚举一条边的横坐标,然后通过勾股定理以及算角度求出其他点的坐标 ...
- 三元二次方程式x2+y 2=z2的正整数解x、y、z称为一组勾股数,又称为毕达哥拉斯三元数组。该方程式也称为“商高方程”或“毕达哥拉斯方程”。 试通过程序设计求指定区间[a,b]内的所有勾股数组。
/*试通过程序设计求指定区间[a,b]内的所有勾股数组. 输入 输入两个正整数a, b (a<b). 输出 输出[a,b]区间内的所有勾股数组. 样例输入 30, 90 样例输出*/ #defi ...
- 数论概论 第二章 勾股数组
本章主要讨论的是勾股数组,也就是关于满足a^2+b^2=c^2的三元组(a,b,c)的问题. 其实,对于勾股数组的个数进行讨论并没有多大意义,因为已知a,b,c为勾股数组,那么显然有da,db,dc( ...
最新文章
- 水泵怎么做_不是说鱼缸里放置三合一水泵都会起到反作用,也得看什么缸什么鱼...
- Dribbble for windows phone 8
- Android APP层 ShellUtils
- python非数值型数据_Python机器学习实战:如何处理非数值特征
- 有关循环和判断的几个小问题
- 钉钉密聊安不安全 钉钉密聊别人能看到吗
- android http封装类,HTTP封装类 工具类 For Android
- HDU1407 测试你是否和LTC水平一样高【暴力】
- 虚拟机克隆后修改网络部分
- 关于市场调查分析与需求分析的心得
- 从医生看病和快餐店点餐理解Node.js的事件驱动
- 国产操作系统Deepin安装
- 在中国程序员工作是青春饭吗?
- 卡耐基梅隆大学计算机科学,卡耐基梅隆大学之计算机科学系
- 飞信linux下载文件,在Linux上安装飞信
- edp和edt哪个好_香水edt和edp的区别
- 关于智能家居,一篇绝对中立的详细指南及各类问题解答
- 电脑记账最简单的方法
- 移动智能与终端安全防护
- 民俗多种内涵-农业大健康·万祥军:牛首山谋定世外桃源
热门文章
- mysql 5.7 drop table_MySQL5.7下面,误操作导致的drop table db1.tb1; 的恢复方法:
- 【NLP】一文了解命名实体识别
- Java中字符串CST的时间日期转换
- 秋季代码调试报错记录
- css 去掉li 标签列表项前面的点
- Python进阶篇:百度指数解密【抓包|JS逆向|数据区分】
- 【PowerPoint】快速设计一份PPT的模板样式
- 详解僵尸进程、进程等待
- [UVM]UVM环境中的clock agent方案
- TAP/TUN/VETH理解