poj1305 Fermat vs. Pythagoras(勾股数)
题意:
设不定方程: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=m^2-n^2,y=2*m*n, z=m^2+n^2
本题目让你求的是,在n范围内(x,y,z<=n)本原的毕达哥拉斯三元组的个数,以及n以内且毕达哥拉斯三元组不涉及的数的个数
思路:
本原的三元组有:(3,4,5),(7,24,25),(5,12,13),(8,15,17),即第一个要输出的为4
所有的毕达哥拉斯三元组,除了上述4个外,还有:(6,8,10),(9,12,15),(12,16,20),(15,20,25)
不包含在这些三元组里面的<=n的数有9个。
思路:很显然,依据前面给出的定理,只要枚举一下m,n(m,n<=sqrt(n)),然后将三元组乘以i(保证i*z在范围内即可),
就可以求出所有的毕达哥拉斯三元组。
代码:
/*100内的勾股数有52
勾股数满足: x=a*a-b*b;
y=2*a*b;
z=a*a+b*b;
其中a,b的奇偶一定要不同
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 1000005
int vis[N]; int gcd(int a,int b)
{
if(b==) return a;
else return gcd(b,a%b);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(vis,,sizeof(vis));
int x,y,z;
int a,b,c;
int ans=;int tot=;
for(int i=;i*i<=n;i+=)
{
for(int j=;j*j<=n;j+=)
{
a=max(i,j);
b=min(i,j);
c=gcd(i,j);
if(c==)
{
x=a*a-b*b;
y=*a*b;
z=a*a+b*b;
for(int k=;k*z<=n;k++)
{
vis[x*k]=;
vis[y*k]=;
vis[z*k]=;//cout<<x*k<<" "<<y*k<<" "<<z*k<<endl;tot++;
}
if(z<=n)
{
ans++;
}
}
}
}
int cnt=;
for(int i=;i<=n;i++)
if(!vis[i]) cnt++;
printf("%d %d\n",ans,cnt);//cout<<tot<<endl;
}
}
poj1305 Fermat vs. Pythagoras(勾股数)的更多相关文章
- Fermat vs. Pythagoras POJ - 1305 (数论之勾股数组(毕达哥拉斯三元组))
题意:(a, b, c)为a2+b2=c2的一个解,那么求gcd(a, b, c)=1的组数,并且a<b<c<=n,和不为解中所含数字的个数,比如在n等于10时,为1, 2, 7,9 ...
- 数论(毕达哥拉斯定理):POJ 1305 Fermat vs. Pythagoras
Fermat vs. Pythagoras Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 1493 Accepted: ...
- UVa 106 - Fermat vs Pythagoras(数论题目)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- MT【315】勾股数
(高考压轴题)证明以下命题:(1)对任意正整数$a$都存在正整数$b,c(b<c)$,使得$a^2,b^2,c^2$成等差数列.(2)存在无穷多个互不相似的三角形$\Delta_n$,其边长$a ...
- hdu 6441 (费马大定理+勾股数 数学)
题意是给定 n 和 a,问是否存在正整数 b,c 满足:a^n + b^n == c^n.输出 b c,若不存在满足条件的 b,c,输出 -1 -1. 当 n > 2 时,由费马大定理,不存在 ...
- C语言 · 勾股数
勾股数 勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] ...
- 猜想:一组勾股数a^2+b^2=c^2中,a,b之一必为4的倍数。
证明: 勾股数可以写成如下形式 a=m2-n2 b=2mn c=m2+n2 而m,n按奇偶分又以下四种情况 m n 奇 偶 ① 偶 奇 ② 偶 偶 ③ 奇 奇 ④ 上面①②③三种情况中,mn中存在至少 ...
- 不用一个判断,用JS直接输出勾股数
说明: 这里勾股数是符合a2+b2=c2的整数,比如32+42=52,52+122=132,怎么把符合条件的勾股数找出来呢?用代数替代的方法可以极大简化程序,直至一个判断都不用. 可以设a=m2-n2 ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 4 - Find Integer 【费马大定理+构造勾股数】
Find Integer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
随机推荐
- varnish流程图
varnish流程图
- Java动手动脑02
一.平方数静方法: public class SquareInt { public static void main(String[] args) { int result; for (int x = ...
- Python网络爬虫数据解析的三种方式
request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...
- class和style绑定
在数据绑定中,一个常见需求是,将数据与元素的 class 列表,以及元素的 style 内联样式的操作绑定在一起.由于它们都是属性(attribute),因此我们可以使用 v-bind 来处理它们:只 ...
- 文件/大文件上传功能实现(JS+PHP)全过程
PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...
- 洛谷P1309 瑞士轮——题解
题目传送 思路非常简单,只要开始时把结构体排个序,每次给赢的加分再排序,共r次,最后再输出分数第q大的就行了. (天真的我估错时间复杂度用每次用sort暴力排序结果60分...)实际上这道题估算时间复 ...
- 嵌入QQ聊天
<a href="http://wpa.qq.com/msgrd?V=1&Uin=1178321443&Site=http://www.nanfangjiadian.c ...
- ES6 模板语法和分隔符
let user = 'Barret'; console.log(`Hi ${user}!`); // Hi Barret!
- 500 cannot be cast to javax.xml.registry.infomodel
在使用mybatis的时候每次一调用一个返回User类型的sql时,总是会报错如下: com.xx.all.domain.User cannot be cast to javax.xml.regist ...
- Window7系统安装Ubuntu16双系统
在电脑上插入ubuntu系统启动盘,之前做好的u盘启动盘,重启计算机,进入BIOS设置界面,设置系统启动为u盘启动,保存后退出.之后进入ubuntu系统安装界面. 在安装界面中选择系统语言,选择安装u ...