题目大意是给出各条边都是正整数的直角三角形的一条边长,求另外两条边可能的一种方案。 除了爆搜脑子一片空白,然后就很没志气的看了题解,提到了勾股数组,于是学习了一下.网络上的资料感觉证明不是详细,所以自己来写个总结。

1.首先如果 $a^2+b^2=c^2$ , 则$(ka)^2+(kb)^2=(kc)^2$ , 因此我们先只考虑$gcd(a,b,c)=1$的情况.而$gcd(a,b,c)=1$ 暗含着 $a,b,c$两两互质。证明:  假设$d=gcd(b,c)>1$  那么有$d|b,d|c  \ \to\   d^2|b^2,d^2|c^2 \ \to\   d^2|(c^2-b^2)=a^2 \ \to\  d|a \ \to\  gcd(a,b,c)>1$ 矛盾。 另外两种情况类似。

2.$a$和$b$必定一个是奇数一个是偶数.

反证: 如果a,b都是偶数,那么c也为偶数,则$gcd(a,b,c)$不可能为1.  如果a,b都是奇数,那么c为偶数.   $a^2+b^2 \equiv\ 2 (mod\ 4)$. 而$c^2 \equiv\ 0 (mod\ 4)$ .

3.不妨设$a$为偶数,那么$b$,$c$都是奇数。  设$a=2mn$ $(m>n)$. 下面证明$(a,b,c)$可以表示为$(2mn,m^2-n^2,m^2+n^2)$的形式。  反解$m,n$可以得到

$m=\sqrt{\frac{c+b}{2}}$    $n=\sqrt{\frac{c-b}{2}}$ .

只需证明$\sqrt{\frac{c+b}{2}}$和$\sqrt{\frac{c-b}{2}}$都是正整数,即证明$\frac{c+b}{2}$和$\frac{c-b}{2}$都是完全平方数。

$a^2=c^2-b^2=(c-b)*(c+b)$.

先证明$d=gcd(c-b,c+b)=2$ :

$$d|c+b,d|c-b\ \to\ \ d|2b,d|2c\ \ \to\ \ d|gcd(2b,2c)\ \ \to\ \ d|2gcd(b,c)\ \ \to\ \ d|2$$

而$b$,$c$均为偶数,那么$c-b$,$c+b$也都是偶数,那么$gcd(c-b,c+b)$只能是2.  所以有$gcd(\frac{c-b}{2},\frac{c+b}{2})=1$

因为$(\frac{a}{2})^2=\frac{c-b}{2}*\frac{c-b}{2}$  且$gcd(\frac{c-b}{2},\frac{c+b}{2})=1$,所以$\frac{c-b}{2}$和$\frac{c+b}{2}$都是完全平方数。

故$(a,b,c)$可以表示为$(2mn,m^2-n^2,m^2+n^2)$的形式,只需取$m=\sqrt{\frac{c+b}{2}}$    $n=\sqrt{\frac{c-b}{2}}$ .

这就给出了构造勾股数组的一个公式,因为$(m,n)$和$(a,b,c)$存在一一对应的关系。

再回到最开始的CF的那道题。

1.如果一开始给的数<=2,那么肯定无解,因为不存在一个勾股数组里面有元素<3.

证明:不妨设$a<=b=2$  如果$a<=2$ 那么$a^2=(c-b)*(c+b)<=4$  容易检验无解。

2.如果一开始给了一个偶数$a$,那么$a=2mn$ 令$n=1,m=\frac{a}{2}$即可构造出一组$(a,b,c)$.

3.如果一开始给了一个奇数$b$,那么$b=m^2-n^2=(m+n)*(m-n)$ 令$m-n=1,m+n=b$ 解出$m$和$n$ 就可以得到一组$a$和$c$了.

ps:构造方法有很多,可以百度一下,这只是我自己想到的一种。

bonus:如果把上面那题升级成求方案数该怎么办?

1.如果一开始给的数<=2,那么肯定无解,因为不存在一个勾股数组里面有元素<3.

2.如果一开始给了一个偶数$a$,那么$a=2mn$ 因为$(m,n)$和$(a,b,c)$存在一一对应的关系,只需求出$a$可以分解成多少种$(m,n)$。通过求$\frac{a}{2}$的因子个数容易得到答案。

3.如果一开始给了一个奇数$b$,那么$b=m^2-n^2=(m+n)*(m-n)$ 只需求出$b$可以分解成多少种$(m+n,m-n)$ 通过求出b的因子个数容易得到答案。

现学了点用latex表示数学公式的语法,就拿这篇博文做做练习. 马上要去上大学啦,给自己加个油,大学里一定要继续努力。

java如何找出勾股数组_勾股数组 学习笔记相关推荐

  1. Java:找出100以内的质数(一)。

    Java:找出1~100之间的质数. 质数(prime number)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 由以上的定义我们可以延伸出另一种解释:这个数 ...

  2. java 找出所有水仙花数,java兑现找出所有的水仙花数

    java实现找出所有的水仙花数. 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153) 在没有考虑效率的情况下 ...

  3. 找出所有不是这两个数组共有的元素

    文章目录 引入 代码 运行测试 引入 找出不是两个数组共有的元素.输入一个正整数 n(1<n≤10),再输入 n 个整 数,存入第 1 个数组中:然后输入一个正整数 m(1<m<=1 ...

  4. C# 传递数组参数_一维数组_二维数组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

    ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

  6. 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...

    [初阶]unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流 一.关于 显示分数时,如何让函数之间相互交流 这是一个非常好的逻辑问题 1 思路:主 ...

  7. 拉勾启源老师mysql讲义,【拉勾教育数据分析实战训练营】--Tableau学习笔记-重点回顾1...

    [拉勾教育数据分析实战训练营]--Tableau学习笔记-重点回顾1 [拉勾教育数据分析实战训练营]--Tableau学习笔记-重点回顾1 以下是我搜罗的一些官方优秀case分享: 1.https:/ ...

  8. ES6基础2(块级作用域、数组对象解构)-学习笔记

    文章目录 ES6基础2(块级作用域.数组对象解构)-学习笔记 块级作用域 数组解构 对象解构 字符串解构 函数的参数解构 ES6基础2(块级作用域.数组对象解构)-学习笔记 块级作用域 //let c ...

  9. c++如何输入数组_从一个数组中找出 N 个数,其和为 M 的所有可能最 nice 的解法...

    编者按:本文由前端狂想录公众号授权奇舞周刊转载. 故事的背景 这是一个呆萌炫酷吊炸天的前端算法题,曾经乃至现在也是叱咤风云在各个面试场景中. 可以这样说,有 90% 以上的前端工程师不会做这个题目. ...

  10. java怎么找出数组最小值,Java找出数组的最小值元素

    Java找出数组的最小值元素 1 说明 在此程序中,我们需要找出数组中存在的最小元素.这可以通过保持变量min来实现,该变量起初将保留第一个元素的值.通过将min的值与数组的元素进行比较来遍历数组.如 ...

最新文章

  1. oracle00313 ora27037,ORA-00313, ORA-00312, ORA-27037 in Standby Database
  2. Nature发表新研究,用“光”加速人工智能 | AI日报
  3. Ansible批量添加远程登录用户
  4. 一口气拿了9家公司的offer,年薪50W
  5. 使用using与typedef来定义别名
  6. 3des加密 java php_php 3DES加密如何兼容Java
  7. rest spring_Spring REST:异常处理卷。 2
  8. jwplayer 消除logo
  9. linux7简单应用,centos7下openTSDB简单应用
  10. html 全屏显示某个区域,JS实现指定区域的全屏显示功能示例
  11. wsdl互联网短信接口_中国移动推出短信小程序
  12. ZZULIoj 1913: 小火山的计算能力
  13. atitit.软件与sql设计模式原理与本质 大总结attialx总结v6 qc26.docx
  14. 小学阅读方法六种_小学数学阅读理解解题技巧,附常见的6种方法
  15. 计算机系统的软件有,计算机系统软件有哪些
  16. 基于C# winform实现随机点名小工具(支持csv导入)
  17. 串联两个路由器共享宽带上网
  18. 机器学习——周志华读书笔记
  19. Lua 编程学习笔记
  20. 安装Ubuntu20.04后我做的那些事:插件,美化

热门文章

  1. java读取qq邮箱邮件
  2. 期刊论文发表的作者顺序有什么讲究吗
  3. 第十二届“中国软件杯”大赛:A10-基于机器学习的分布式系统故障诊断系统——baseline(二)
  4. NU Virgos(圣女天团)
  5. [蓝桥杯2019初赛]外卖店优先级
  6. Unity中国象棋(二)——走棋
  7. 做shopify收款方式有哪些
  8. 原始资料的收集方法———定性资料的收集
  9. c语言程序设计吉林大学康辉目录,[吉林大学康辉] 经典C语言程序设计视频教程 51讲...
  10. 【python】批量获取企业公司的统一社会代码