假设x为奇数,y为偶数,则z为奇数,2z与2x的最大公因数为2,2z和2x可分别写作

  • 2z = (z + x) + (z - x)
  • 2x = (z + x) - (z - x)

那么跟据最大公因数性质,z + x和z - x的最大公因数也为2,又因为:

  • (z + x)(z - x) = y2,两边同除以4得:
    ((z + x) / 2)((z - x) / 2) = (y / 2)2

故可令:

  • z + x = 2m2, z - x = 2n2
    其中z = m + n, x = m - n(m与n互质)

则有:

  • y2 = z2 - x2 = 2m22n2 = 4m2n2
    即y = 2mn。

综上所述,可得到下式:

  • x = m2 - n2, y = 2mn, z = m2 + n2. (m, n为任意自然数)

这里还有一个问题:题目要求统计(x, y, z)三元组的数量时只统计x,y和z两两互质的的情况,这个问题用上面的算法就可以解决了。但对于统计p的数量,题目并不限定三元组是两两互质的。但是上式不能生成所有x, y, z并不是两两互质的情况。然而假设x与y最大公因数w不为1,则z也必能被w整除,因此w为x, y, z三个数的公因数。归纳总结可知,所有非两两互质的x0, y0, z0都可由一组互质的x, y, z乘以系数得到。根据以上理论就可以快速的求解了。

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAX 1000010
using namespace std;
bool vis[MAX];
int prime[MAX][],n;
int gcd(int a, int b)
{
return b == ? a : gcd(b, a%b);
}
int upper(int l, int r, int v)
{
int m;
while (l < r)
{
m = l + (r - l) / ;
if (prime[m][] <= v) l = m + ;
else r = m;
}
return r;
}
int cmp(const void*a, const void*b)
{
return ((int*)a)[] - ((int*)b)[];
}
int main()
{
int i,j,z,x,y,k=;
int imax = int(sqrt(MAX >> )+0.5),jmax;
for (i = ; i <= imax; i++)
{
jmax = int(sqrt(MAX - i*i) + 0.5);
for (j = i + ; j <= jmax; j++)
if ((i & ) + (j & )== && gcd(i, j) == )//(i&1)+(j&1)==1 一奇一偶
{
y = * i*j;
z = i*i + j*j;
x = j*j - i*i;
if (x*x+y*y==z*z&&z<=)
{
prime[k][] = x;
prime[k][] = y;
prime[k++][] = z;
}
}
}
qsort(prime,k,sizeof(prime[]),cmp);
while (scanf("%d", &n) == )
{
int a = upper(, k, n);
memset(vis, , n + );
for (i = ; i < a; i++)
for (j = ; j*prime[i][] <= n; j++)
{
vis[j*prime[i][]] = ;
vis[j*prime[i][]] = ;
vis[j*prime[i][]] = ;
}
int count = ;
for (i = ; i <= n; i++)
if (!vis[i]) count++;
printf("%d %d\n", a, count);
}
return ;
}

UVA106 - Fermat vs. Pythagoras的更多相关文章

  1. UVa 106 - Fermat vs Pythagoras(数论题目)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  2. 数论(毕达哥拉斯定理):POJ 1305 Fermat vs. Pythagoras

    Fermat vs. Pythagoras Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 1493   Accepted: ...

  3. POJ 1305 Fermat vs. Pythagoras (毕达哥拉斯三元组)

    设不定方程:x^2+y^2=z^2若正整数三元组(x,y,z)满足上述方程,则称为毕达哥拉斯三元组.若gcd(x,y,z)=1,则称为本原的毕达哥拉斯三元组. 定理:正整数x,y,z构成一个本原的毕达 ...

  4. 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 ...

  5. Uva 106 - Fermat vs. Pythagoras 解题报告

    数论题,考查了本原勾股数(PPT) 对一个三元组(a,b,c)两两互质 且满足 a2 + b2 = c2 首先有结论 a 和 b 奇偶性不同 c总是奇数(可用反证法证明,不赘述) 设 a为奇数 b为偶 ...

  6. poj1305 Fermat vs. Pythagoras(勾股数)

    题目传送门 题意: 设不定方程:x^2+y^2=z^2若正整数三元组(x,y,z)满足上述方程,则称为毕达哥拉斯三元组.若gcd(x,y,z)=1,则称为本原的毕达哥拉斯三元组. 定理:正整数x,y, ...

  7. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

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

    本原毕达哥拉斯三元组是由三个正整数x,y,z组成,且gcd(x,y,z)=1,x*x+y*y=z*z 对于所有的本原毕达哥拉斯三元组(a,b,c) (a*a+b*b=c*c,a与b必定奇偶互异,且c为 ...

  9. SDUT Fermat’s Chirstmas Theorem(素数筛)

    Fermat's Chirstmas Theorem Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 In a letter ...

随机推荐

  1. JMS理解2

    使用JMS 的应用程序被称为JMS 客户端,处理消息路由与传递的消息系统被称为JMS Provider,而JMS 应用则是由多个JMS 客户端和一个JMS Provider 构成的业务系统.发送消息的 ...

  2. iOS相关教程

    Xcode Xcode 7中你一定要知道的炸裂调试神技 Xcode 6和Swift中应用程序的国际化和本地化 iOS新版本 兼容iOS 10 资料整理笔记 整理iOS9适配中出现的坑(图文) Swif ...

  3. java中的字符编码方式

    1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下. 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符 ...

  4. 非常简洁的js图片轮播

    <div id="tupian"></div><script>var jpg =new Array();jpg[0]="url(c.j ...

  5. NOIP2005-普及组复赛-第一题-陶陶摘苹果

    题目描述 Description 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

  6. 【TestDirector】常见问题分析

    1.IE7无法访问TD 问题原因:兼容性问题 解决方法:步骤一.以系统管理员身份登陆TD: 步骤二.找到TD服务器中TDBIN目录(缺省情况下是C:\Inetpub\TDBIN目录),用编辑器打开st ...

  7. Thrift源码解析--TBinaryProtocol

    本文为原创,未经许可禁止转载. 关于Tprotocol层都是一些通信协议,个人感觉内容较大,很难分类描述清楚.故打算以TBinaryProtocol为例,分析客户端发请求以及接收服务端返回数据的整个过 ...

  8. 阅读http://zh.lucida.me/有感

    lucida大神本科毕业于大工,研究生毕业于北航,有这样的学历在社会上混就已经绰绰有余了,但是lucida神并不满足,刻苦努力,拼搏进取,最后进入google london工作,曾经一度在micros ...

  9. Chapter 2 Open Book——15

    The rest of the week was uneventful. I got used to the routine of my classes. 这周剩下的时间都是平淡无事的.我就是正常的上 ...

  10. Chapter 1 First Sight——26

    "Which ones are the Cullens?" I asked. "They don't look related…" 哪一个是卡伦,我问道,他们都 ...