勾股数(毕达哥拉斯三元组)

勾股数:可以构成一组直角三角形边长的三个正整数
eg: 3 4 5
勾股数的规律:
1)任何大于1的正奇数a=2k+1,其平方t=a^2仍为奇数,且将平方数拆成两个相邻的整数 b = t / 2, c = t / 2 + 1,a,b,c为一组勾股数。
eg: 3 4 5 5 12 13 7 24 25
证明:

2)任意大于2的正偶数a=2*k,b = k^2-1,c = k^2+1,a,b,c为一组勾股数.
eg:4 3 5 6 8 10 8 15 17
证明:同1)a^2 + b^2 = c^2 代入k即可.
3)毕达哥拉斯三元组
不定方程x^2 + y^2 = z^2.的一组正整数解(x,y,z)称为毕达哥拉斯三元组。
若gcd(x,y,z)=1,则称为本原的毕达哥拉斯三元组。
定理:
正整数x,y,z构成一个本原的毕达哥拉斯三元组且y为偶数,当且仅当存在互素的正整数m,n(m>n),其中m,n的奇偶性不同,
并且满足:x=m2-n2,y=2mn, z=m2+n2。
4)由1)可知直角三角形短直角边为大于1的奇数,另一条直角边与斜边是两个连续自然数。
5)再由4)可推导如果短直角边为奇数,则直角三角形的周长等于短直角边的平方与其本身的和

例题:
codeforce 368
题意: 给出一个正整数n问是否能够找到另外两个正整数,使得这三个正整数为一组勾股数。可以输出另外两个数字,否则输出-1.
解题思路:性质1,2。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){ll n;while(cin>>n){if(n==1||n==2){puts("-1");continue;}if(n&1){cout<<n*n/2<<' '<<n*n/2+1<<endl;continue;}else{n /= 2;cout<<n*n-1<<' '<<n*n+1<<endl;continue;}}return 0;
}

HDU 6411 Find Integer
题意:
给出n,a 求不定方程a^n + b^n = c^n 的一组解b,c.(其中b,c>1)
解题:
1)n=0,显然无解
2)n=1,最简单b=a,c=2*a
3)n=2,勾股数同上一题.
4)n>2,费马大定理x^n + y^n = z^n 在(n>2情况下)无解 直接-1

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){int T;ll n,a;scanf("%d",&T);while(T--){scanf("%lld%lld",&n,&a);if(n==0||n>2){puts("-1 -1");continue;}if(n==1){printf("%lld %lld\n",a,a<<1);continue;}else{if(a&1){printf("%lld %lld\n",a*a/2,a*a/2+1);}else{a /= 2;printf("%lld %lld\n",a*a-1,a*a+1);}}}return 0;
}

POJ 1305 Fermat vs. Pythagoras
题意:给出正整数n,求出(x,y,z<=n)满足不定方程 x^2 + y^2 = z^2且gcd(x,y,z)==1的三元组(x,y,z)的个数,同时求出n以内且毕达哥拉斯三元组不涉及的数的个数。
思路:利用性质3,枚举m,n即可。
AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 1e6+10;
bool vis[maxn];
int gcd(int a,int b){return (b==0)?a:gcd(b,a%b);
}
template <typename T>
inline T Max(const T &a,const T &b){return a>b?a:b;
}
template <typename T>
inline T Min(const T &a,const T &b){return a<b?a:b;
}
int main(){int n,up;while(~scanf("%d",&n)){for(int i=1;i<=n;++i){vis[i] = 0;}up = (int)sqrt(1.0*n+0.5);int ans1=0,ans2=0;//i,j奇偶性一定不同for(int i=1;i<=up;i+=2){//枚举奇数for(int j=2;j<=up;j+=2){//枚举偶数int d = gcd(i,j);if(d==1){int a = Max(i,j);int b = Min(i,j);int x = a*a-b*b;int y = 2*a*b;int z = a*a+b*b;if(z<=n){++ans1;}else{continue;}for(int k=1;k*z<=n;++k){vis[x*k] = 1;vis[y*k] = 1;vis[z*k] = 1;}}}}for(int i=1;i<=n;++i){if(!vis[i]) ++ans2;}printf("%d %d\n",ans1,ans2);}return 0;
}

勾股数(毕达哥拉斯三元组)相关推荐

  1. 本原勾股数(毕达哥拉斯三元组)的个数

    基本概念 本文以<初等数论及其应用 (原书第6版)>13.1 毕达哥拉斯三元组 为基础.为叙述简便,把毕达哥拉斯三元组(Pythagorean Triples)称为勾股数. 另外,也可以参 ...

  2. 三元二次方程式x2+y 2=z2的正整数解x、y、z称为一组勾股数,又称为毕达哥拉斯三元数组。该方程式也称为“商高方程”或“毕达哥拉斯方程”。 试通过程序设计求指定区间[a,b]内的所有勾股数组。

    /*试通过程序设计求指定区间[a,b]内的所有勾股数组. 输入 输入两个正整数a, b (a<b). 输出 输出[a,b]区间内的所有勾股数组. 样例输入 30, 90 样例输出*/ #defi ...

  3. 特殊的不定方程——毕达哥拉斯三元组(勾股数组)

    毕达哥拉斯三元组:若正整数x,y,z满足下x^2+y^2=z^2.满足这个方程的正整数三元组被称为毕达哥拉斯三元组. 本原毕达哥拉斯三元组:若gcd(x,y,a)=1,则正整数三元组被称为本原毕达哥拉 ...

  4. 数论 —— 毕达哥拉斯三元组

    [定义] 满足  的  三元组称为毕达哥拉斯三元组,当  时,称其为本原的. 毕达哥拉斯三元组,也称为勾股数. [性质] 由 x.y.z 构成的三元组 (x,y,z) ,其中 y 为偶数,那么由他们构 ...

  5. 4-2毕达哥拉斯三元组

    一个直角三角形具有边长均为整数的三条边.直角三角形边长的这组整数值称为毕达哥拉斯三元组(中国称为勾股数).这三条边必须满足这样的关系:两条直角边的平方之和必须等于直角三角形斜边的平方.从键盘输入一个正 ...

  6. 7-204 毕达哥拉斯三元组

    7-204 毕达哥拉斯三元组 一个直角三角形具有边长均为整数的三条边.直角三角形边长的这组整数值称为毕达哥拉斯三元组(中国称为勾股数).这三条边必须满足这样的关系:两条直角边的平方之和必须等于直角三角 ...

  7. 【POj1305】毕达哥拉斯三元组

    1.题目链接.这个题目是在求这样的一个问题:三个正整数x,y,z都小于等于N,这三个数组成一个三元组(x,y,z).其中,他们两两互质,也就是说(x,y,z)=1.并且x*x+y*y=z*z.求出这样 ...

  8. 有趣的勾股数及其计算

    目录 前言 暴力计算 -- 穷举法 一个快速但不完美的算法 前言 勾股数又称毕达哥拉斯三元组,即可以构成直角三角形边长的三个整数,例如:(3, 4, 5).(5, 12, 13)等等.自然,勾股数同乘 ...

  9. 本原勾股数的表示方法

    本文以<初等数论及其应用 (原书第6版)>13.1 毕达哥拉斯三元组 为基础.为叙述简便,把毕达哥拉斯三元组(Pythagorean Triples)称为勾股数. 另外,也可以参考< ...

最新文章

  1. 分布式ID生成的9种方法,特好用!
  2. 深度学习(六十七)metal forge深度学习库使用
  3. 中国科学技术大学生物信息学考试复习资料(整理版)
  4. 左耳朵耗子的时间管理法则
  5. Hi3519使用·记录
  6. AXI总线,AXI_BRAM读写仿真测试
  7. linux 清除swap 数据,linux清除swap
  8. 三国时期蜀国的巅峰实力
  9. 写作三件套(VScode Miktex Latex Workshop)入门三大坑
  10. 大厂面试必备之消息队列连环问
  11. Java实现 LeetCode 457 环形数组循环
  12. php printer_open 用法_php – 调用未定义的函数printer_open()
  13. iOS 14.2 内置原生壁纸,安排上吧!
  14. 大一项目实训—学生成绩管理系统
  15. 【机器学习】决策树特征选择准则 信息增益、信息增益率、基尼系数的计算及其python实现
  16. elasticsearch遇到的问题(一) 底层修改同义词典synonyms.txt未生效,将同义词加到分词器也未生效
  17. Vue跨域访问后端接口问题解决
  18. http之 半包 粘包
  19. 简单实现RAS加密-java
  20. Gitlab--替换gitlab项目目录,重新上传文件

热门文章

  1. 教你把四十个QQ个人资料小图标全点亮
  2. 用 Python 绘制个人足迹地图
  3. 2021新版本Nacos配置中心提示‘url‘ attribute is not specified and no embedded datasource could be configured
  4. 机器人周志_唐骏:机器人时代已如梦初醒
  5. Eclipse修改背景颜色(豆沙绿)
  6. AlphaStar的游戏——星际争霸2 AI综述
  7. js数据类型转换(5)
  8. 《信号与系统》实验-使用 MATLAB 进行生成数字音乐、生成乐器音乐、音乐处理与添加音乐特效(题目)
  9. 常见蛋白质种类_蛋白粉有哪些种类?适合日常补充的有哪种?
  10. app ui设计规范