本原毕达哥拉斯三元组是由三个正整数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为奇数。这里我们设b为偶数)

则:和

a=st

b=(s*s-t*t)/2

c=(s*s+t*t)/2

其中s>t>=1且gcd(s,t)=1

是一一对应的。

看看别人得证明:

http://blog.csdn.net/loinus/article/details/7824841

看看我的证明

有了这个定理就这题就很好做了。

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

Description

Computer generated and assisted proofs and verification occupy a small niche in the realm of Computer Science. The first proof of the four-color problem was completed with the assistance of a computer program and current efforts in verification have succeeded in verifying the translation of high-level code down to the chip level. 
This problem deals with computing quantities relating to part of Fermat's Last Theorem: that there are no integer solutions of a^n + b^n = c^n for n > 2. 
Given a positive integer N, you are to write a program that computes two quantities regarding the solution of x^2 + y^2 = z^2, where x, y, and z are constrained to be positive integers less than or equal to N. You are to compute the number of triples (x,y,z) such that x < y < z, and they are relatively prime, i.e., have no common divisor larger than 1. You are also to compute the number of values 0 < p <= N such that p is not part of any triple (not just relatively prime triples). 

Input

The input consists of a sequence of positive integers, one per line. Each integer in the input file will be less than or equal to 1,000,000. Input is terminated by end-of-file

Output

For each integer N in the input file print two integers separated by a space. The first integer is the number of relatively prime triples (such that each component of the triple is <=N). The second number is the number of positive integers <=N that are not part of any triple whose components are all <=N. There should be one output line for each input line.

Sample Input

10
25
100

Sample Output

1 4
4 9
16 27
//
// main.cpp
// poj1305
//
// Created by 陈加寿 on 15/11/30.
// Copyright (c) 2015年 陈加寿. All rights reserved.
// #include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std; int mark[]; long long gcd(long long a,long long b)
{
if(b==) return a;
return gcd(b,a%b);
} int main(int argc, const char * argv[]) {
int n;
while(cin>>n)
{
memset(mark,,sizeof(mark));
int cnt=;
for(long long i=;;i+=)
{
long long a,b,c;
if( (i*i+(i+)*(i+))/ >n ) break; for(long long j=i+;;j+=)
{
if(gcd(i,j)==)
{
c=(i*i+j*j)/;
b=(j*j-i*i)/;
a=i*j;
if(c>n) break;
cnt++;
for(long long k=;k*c<=n;k++)
{
mark[a*k]=;
mark[b*k]=;
mark[c*k]=;
}
}
}
}
int ans=;
for(int i=;i<=n;i++)
if(mark[i]==) ans++;
cout<<cnt<<" "<<ans<<endl;
}
return ;
}

最新文章

  1. iphone的click导致div变黑
  2. 归并排序算法 java 实现
  3. JS实现HashMap
  4. 恶意IP远程登录Linux服务器脚本
  5. hdu 4712 Hamming Distance 随机
  6. 修复Dll文件
  7. Web Api 2 怎么支持 Session
  8. css3 旋转效果加上双面显示效果
  9. COUNT(*)与COUNT(列名)的区别(转)
  10. Ubuntu14.0.4 64位安装Chrome浏览器
  11. 探索 Python 学习
  12. 第一册:lesson twenty-one.
  13. w10谷歌chrome关闭自动更新
  14. 阿里云上 配置 vsftpd 配置文件 (一个成功例子)
  15. Linux下创建和删除软、硬链接 可临时处理空间不足
  16. 关于 wsdl2Java 自动生成客户端调取webservice接口
  17. Spring MVC 确定目标方法POJO 类型参数
  18. Android实时推送
  19. [POI2008]Triangles
  20. use getters and setters Learning PHP Design Patterns

热门文章

  1. namespace使用方法
  2. 2017年开发者生态报告:Python最多人想尝试的编程语言(转载)
  3. JavaScript Best Practices
  4. 转: Servlet-jsp从入门到精通 1~5
  5. DataSet之增删改查操作(DataGridView绑定)
  6. MockServer的测试思想与实现
  7. JAVA Eclipse如何重命名包
  8. Windows无法删除文件 提示找不到该项目怎么办
  9. 尝试一下markdown
  10. Oracle基础 程序包