hdu~4282(数学题)
2015-09-03 18:29
281 查看
题目链接
数学题,随便分析一下就能做了.
首先 X^Z + Y^Z + XYZ = K K<2^31
因为z>1 ,所以当z=2时,式子转化为 x^2<x^2+y^2+2*x*y, x,y的范围 <2^16
z=2时, x^3<x^3+y^3+3*x*y, x,y范围 <2^10=1024.
所以 当K>=3的时候这已经是个暴力水题了,只需要特判K==2:
数学题,随便分析一下就能做了.
首先 X^Z + Y^Z + XYZ = K K<2^31
因为z>1 ,所以当z=2时,式子转化为 x^2<x^2+y^2+2*x*y, x,y的范围 <2^16
z=2时, x^3<x^3+y^3+3*x*y, x,y范围 <2^10=1024.
所以 当K>=3的时候这已经是个暴力水题了,只需要特判K==2:
#include <stdio.h> #include <math.h> #define ll long long ll pow(ll x, ll y){ ll sum=1; for(int i=1;i<=y;++i) sum*=x; return sum; } int main() { ll n; while(scanf("%lld",&n) && n){ long long int ans=0; for(int i=1;i<=sqrt(n);++i){ //特判k==2 if(i*i==n){ ans=(i-1)/2; break; } } for(ll z=3;z<=31;++z){ for(ll x=1;x<=1100;++x){ //2^10=1024 for(ll y=x+1;y<=1100;++y){ ll temp=pow(x,z)+pow(y,z)+x*y*z; if(temp==n){ // printf("%d %d %d\n",x,y,z); ans++; break; } else if(temp>n || temp<0) break; } if(pow(x,z)>n) break; //x^z>n则直接跳出 } } printf("%lld\n",ans); } return 0; }
相关文章推荐
- Access-based enumeration in Windows Server 2012
- Java基础-内部类及其应用
- 不用堆栈实现树的先序遍历
- C++基础---string类的find/find_first_of/find_first_not_of/rfind/find_last_of/find_last_not_of
- PCIe 驱动流程(LTSSM)
- 阻塞与非阻塞,同步与异步
- 定位
- sql server 2012 报表开发(4) Reporting Service 行转列方法
- ATS 5.3.0中parent.config配置文件解读
- JavaScript进阶
- CPlus的简单线程的制作
- 扩展欧几里得算法
- C++基础---string类的operator==/operator!=/operator</operator<=/operator>/operator>=/compare
- GCJ 2008 Round1AA
- 组合数C(n,m)的计算
- C++函数中那些不可以被声明为虚函数的函数
- 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest H Milestones1 (暴力)
- 框架模式MVP在Android中的使用
- 对加权(无负值边)的图进行最短路径搜索
- Win10系统“获取会员版本”选项不可用怎么办?“获取会员版本”选项不可用的解决方法