51nod 1165 整边直角三角形的数量
2015-06-22 13:31
267 查看
题目链接:传送门
题意:
给定一个直角三角形的周长,有多少个这样的直角三角形
分析:
设三边长为 A,B,C A <= B <= C. A + B + C = L,A^2 + B^2 = C^2
两个方程联立消去C: A + B + sqrt(A^2 + B^2) = l;
B = ( L^2 - 2*L*A )/( 2*L- 2*A )
设t = L - A. B = L - L^2/( 2*t );
因为 0 < A < L/2;且B为一个正整数。
因此 2*t必定为L^2的一个因子且这个因子必定含有2的倍数。
根据上面的不等式可以解出 sqrt(2)*L < t < L*2
代码如下:
题意:
给定一个直角三角形的周长,有多少个这样的直角三角形
分析:
设三边长为 A,B,C A <= B <= C. A + B + C = L,A^2 + B^2 = C^2
两个方程联立消去C: A + B + sqrt(A^2 + B^2) = l;
B = ( L^2 - 2*L*A )/( 2*L- 2*A )
设t = L - A. B = L - L^2/( 2*t );
因为 0 < A < L/2;且B为一个正整数。
因此 2*t必定为L^2的一个因子且这个因子必定含有2的倍数。
根据上面的不等式可以解出 sqrt(2)*L < t < L*2
代码如下:
#include <iostream> #include <cstdio> #include <cmath> #include <set> #include <cstring> using namespace std; const int maxn = 1e7+10; typedef long long LL; int p[maxn/10],cnt; bool vis[maxn]; int fac[1000],tot; int num[1000]; void init(){ cnt=0; memset(vis,0,sizeof(vis)); for(int i=2;i<maxn;i++){ if(!vis[i]){ p[cnt++]=i; for(int j=i+i;j<maxn;j+=i) vis[j]=1; } } } void get(LL x){ tot=0; memset(num,0,sizeof(num)); for(int i=0;i<cnt&&p[i]*p[i]<=x;i++){ if(x%p[i]==0){ fac[tot]=p[i]; while(x%p[i]==0) num[tot]++,x/=p[i]; num[tot]*=2; tot++; } } if(x>1) fac[tot]=x,num[tot++]=2; } int ans = 0; LL n; set<LL>st; void dfs(int id,LL val){ if(id>=tot||val>=2*n) return ; if(val>sqrt(2)*n&&val<2*n&&val%2==0) st.insert(val); if(num[id]>0){ num[id]--; dfs(id,val*fac[id]); dfs(id+1,val*fac[id]); num[id]++; } dfs(id+1,val); } int main() { init(); int t; scanf("%d",&t); while(t--){ scanf("%lld",&n); ans = 0; if(n%2){puts("0");continue;} get(n); st.clear(); dfs(0,1); printf("%d\n",st.size()); } return 0; }
相关文章推荐
- 判断回文,位与,位或
- java基础—文件的切割与合并
- Billboard(线段树区间更新与求值)
- Javascript原型与对象等知识
- 学习了ZKW费用流
- 试一下LaTeX
- JavaScript 2048小游戏
- Ubuntu安装dos2unix命令
- 关于递归删除链表节点为什么不会断链问题解释
- 类,对象,方法
- mysql数据源spring配置
- 使用apt-fast 来加速你的Ubuntu 的apt
- 求助管理员,这是什么情况
- Cortex-A8嵌入式开发板平台搭建
- pl/sql developer导出数据到excel的方法
- Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择
- 高性能JavaScript笔记一(加载和执行、数据访问、DOM编程)
- alex教学视频--购物表
- GSON 学习
- 我的代码转风格了