对于方程:,满足条件:x,y,z两两互素的正整数解为:

,其中m>n>0,gcd(m,n)=1,m,n一奇一偶。


典型题目:POJ1305,HDU3939

对于POJ1305很简单,下面重点来解析HDU3939题。


题目:Sticks and Right Triangle

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
using namespace std;
typedef long long LL;
const int N=1000005;
int p[N],phi[N];
bool prime[N];
int check[35];
int k,num;
LL ans,L;
void isprime()
{
k=0;
int i,j;
memset(prime,true,sizeof(prime));
for(i=2;i<N;i++)
{
if(prime[i])
{
p[k++]=i;
for(j=i+i;j<N;j+=i)
{
prime[j]=false;
}
}
}
}
void Init_phi()
{
int i,j;
for(i=1;i<N;i++)  phi[i]=i;
for(i=2;i<N;i+=2) phi[i]>>=1;
for(i=3;i<N;i+=2)
{
if(phi[i]==i)
{
for(j=i;j<N;j+=i)
{
phi[j]=phi[j]-phi[j]/i;
}
}
}
}
void prime_check(int n)
{
num=0;
if(prime[n])
{
check[num++]=n;
return;
}
for(int i=0;i<k&&n>1;i++)
{
if(n%p[i]==0)
{
check[num++]=p[i];
while(n%p[i]==0) n/=p[i];
if(n>1&&prime[n])
{
check[num++]=n;
return;
}
}
}
}
void dfs(int k,int r,int s,int n)
{
if(k==num)
{
if(r&1) ans-=n/s;
else    ans+=n/s;
return;
}
dfs(k+1,r,s,n);
dfs(k+1,r+1,s*check[k],n);
}
int main()
{
int T;
isprime();
Init_phi();
cin>>T;
while(T--)
{
ans=0;
cin>>L;
int m=(int)sqrt(1.0*L);
for(int i=m;i>0;i--)
{
int p=(int)sqrt(L-(LL)i*i);
if(i&1)
{
prime_check(i);
if(i<=p) dfs(0,0,1,i>>1);
else     dfs(0,0,1,p>>1);
}
else
{
if(i<=p) ans+=phi[i];
else
{
prime_check(i);
dfs(0,0,1,p);
}
}
}
cout<<ans<<endl;
}
return 0;
}

HDU3939(毕达哥拉斯三元组的解)相关推荐

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

    勾股数(毕达哥拉斯三元组) 勾股数:可以构成一组直角三角形边长的三个正整数. eg: 3 4 5 勾股数的规律: 1)任何大于1的正奇数a=2k+1,其平方t=a^2仍为奇数,且将平方数拆成两个相邻的 ...

  2. FZU1669 Right-angled Triangle【毕达哥拉斯三元组】

    主题链接: http://acm.fzu.edu.cn/problem.php?pid=1669 题目大意: 求满足以a.b为直角边,c为斜边,而且满足a + b + c <= L的直角三角形的 ...

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

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

  4. 7 特殊毕达哥拉斯三元组

    毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足 a^ + b^ = c^ 例如,3^ + 4^ = 9 + 16 = 25 = 5^. 有且只有一个毕达哥拉斯三元组满足 ...

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

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

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

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

  7. 毕达哥拉斯三元组及本原毕达哥拉斯三元组

    毕达哥拉斯定理:勾股定理又称商高定理.毕达哥拉斯定理,是平面几何中一个基本而重要的定理.勾股定理说明,平面上的直角三角形的两条直角边的长度(古称勾长.股长)的平方和等于斜边长(古称弦长)的平方.反之, ...

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

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

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

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

最新文章

  1. LeetCode实战:x 的平方根
  2. erlang四种启动监控策略
  3. 从源码层面带你实现一个自动注入注解
  4. DRILLNET 2.0------第十八章 起下钻水力参数计算模型
  5. Axure高保真智慧消防远程监管系统数据可视化大屏看板+web端高保真大数据分析平台看板+大数据交换配置管理平台大屏动态可视化看板
  6. 【论文笔记】K-plet Recurrent Neural Networks for Sequential Recommendation
  7. Quick Switch Virtual Desktop[AutoHotkey]
  8. 使用Dev-C++查看vector数组中的变量值
  9. Apache双机热备
  10. BP神经网络学习总结
  11. SpringCloud升级之路2020.0.x版-1.背景
  12. 自己搭建网站选用服务器的方法
  13. Centos8使用yum报错 Couldn‘t resolve host name for http://mirrorlist.centos.org/?releas
  14. Excel打开csv文件乱码
  15. AdamW优化器简单理解
  16. 语音信号端点检测 matlab,matlab中语音端点检测
  17. 帆软单元格格式属性设置
  18. python300行代码_Python:游戏:300行代码实现俄罗斯方块
  19. 1992-2022年31省人均gdp/各省人均地区生产总值
  20. Linux_网络项目_WEB服务器 设计CGI机制,与CGI处理数据

热门文章

  1. Response_案例3_输出字节数据
  2. RestFul通信风格
  3. Bootstrap组件_按钮组
  4. lamp自动部署工具_salt实现lamp自动化部署
  5. CentOS7通过yum安装MySQL5.7
  6. 有关sublime的一些使用
  7. 白瑜庆:知乎基于Kubernetes的kafka平台的设计和实现
  8. HMAC-SHA1加密
  9. C# HTTP请求后对gzip页面实现解压缩
  10. JavaScript 身份证号有效验证详解及实例代码