数论题,考查了本原勾股数(PPT)

对一个三元组(a,b,c)两两互质

且满足 a2 + b2 = c2

首先有结论

a 和 b 奇偶性不同 c总是奇数(可用反证法证明,不赘述)

设 a为奇数 b为偶数 a,b,c互质

a2 = c2 – b2 =(c-b)(c+b)

由于c和b互质 且a为奇数

(c-b)与(c+b)也互质

令(c+b)=s2  (c-b)=t2

有 c=(s2+t2)/2 b=(s2-t2)/2

a=st

这时可以枚举s 和 t 保证 s t 互质

非本原勾股数只需乘上一个系数即可

 #include <iostream>
#include <math.h>
#include <cstring>
int flag[];
using namespace std;
int main()
{
int i,m,n,maxm,maxn;
int ans=;
for (;cin>>i;ans=)
{
memset(flag,,sizeof flag);
maxm=(int)sqrt((float)i-);
for (m=;m<=maxm;++m)
{
maxn=(int)sqrt((float)i-m*m);
maxn=maxn>=m?m-:maxn;
for(n=;n<=maxn;++n)
{
if(n%!=m%)
{
int a=m,b=n,c;
for(int r; (r = a % b) != ; a = b, b = r);
if (b == )
{
++ans;
a = m * m - n * n, b = * m * n, c = m * m + n * n;
for (int k = ; c * k <= i; ++k)
{
flag[a * k] = flag[b * k] = flag[c * k] = ;
}
}
}
}
}
cout << ans << " ";
for (ans = , m = ; m <= i; ans += !flag[m++]);
cout << ans << endl;
}
return ;
}

    

最新文章

  1. 浏览器 HTTP 协议缓存机制详解
  2. insertAdjacentHTML和insertAdjacentText方法
  3. item3 二维数组中的查找[剑指offer]
  4. Android 广播(内部类)
  5. IOS7最新的系统漏洞
  6. Android Volley 之自定义Request
  7. 用 gulp.spritesmith 自动化雪碧图
  8. Linux Ubuntu从零开始部署web环境及项目 -----部署项目 (三)
  9. Mysql 删除重复记录,只保留最小的一条
  10. remote: Incorrect username or password ( access token )
  11. foreach加循环体与不加循环体的区别
  12. 细说log4j之log4j 1.x
  13. Java内存模型及Java关键字 volatile的作用和使用说明
  14. vagrant特性——基于docker开发环境(docker和vagrant的结合)-4-简单例子-有问题
  15. 2013长春网赛1004 hdu 4762 Cut the Cake
  16. 【AtCoder】ARC088
  17. 【Unity】2.9 光源(Lights)
  18. iOS 开发之UIStackView的应用
  19. linux下的时间管理概述
  20. hihocoder1580 Matrix

热门文章

  1. node.js学习笔记(1)
  2. Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解
  3. jQuery 点击查看 收起
  4. zookeeper、consul 实现注册中心
  5. 【git】搭建git服务器
  6. java正则表达式进阶运用20181023
  7. IIS更改根目录
  8. Web项目ConcurrentModificationException异常
  9. MYSQL有那些优化?
  10. buf.toString()