杭电acm 4282 A very hard mathematic problem
Haoren is very good at solving mathematic problems. Today he is working a problem like this:
Find three positive integers X, Y and Z (X < Y, Z > 1) that holds
X^Z + Y^Z + XYZ = K
where K is another given integer.
Here the operator “^” means power, e.g., 2^3 = 2 * 2 * 2.
Finding a solution is quite easy to Haoren. Now he wants to challenge more: What’s the total number of different solutions?
Surprisingly, he is unable to solve this one. It seems that it’s really a very hard mathematic problem.
Now, it’s your turn.
Input
There are multiple test cases.
For each case, there is only one integer K (0 < K < 2^31) in a line.
K = 0 implies the end of input.
Output
Output the total number of solutions in a line for each test case.
Sample Input
9
53
6
0
Sample Output
1
1
0
Hint
9 = 1^2 + 2^2 + 1 * 2 * 2
53 = 2^3 + 3^3 + 2 * 3 * 3
解题思路:我相信大家刚看到本题时,都会想到暴力,但又看了看会觉得暴力超时呀!的确,本题直接用暴力会超时,但是,我们不妨换一种思路,当z=2时,x^z + y^z +x*y*z=(x+y)^2=k,即x+y=sqrt(k),那么只需要在1~2^16范围内来判断,并且这里拥有一个小规律,组合数ant = (sqrt(k) - 1)/2(这个仅在sqrt(k)是整数时成立,非整数时无解);
那么接下来只需要判断z>=3&&z<=31时的情况了,根据化简此时x<y<=1124(这里只要大于1024即可),于是直接暴力,但是别忘了剪枝,否则依旧会超时。
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>using namespace std;long long Pow(int x,int n)//本题需要自己编写pow函数,调用系统函数会超时。
{long long ans = 1;for(int i=1;i<=n;i++)ans *= x;return ans;
}int main()
{long long k;int x,y,z;while(scanf("%lld",&k)!=EOF && k){long long ant = 0;int a = (int)sqrt(k);if(a*a*1.0 == k)//进行z=2的判断ant+=(a-1)/2;for(z=3;z<=31;z++)//对z>=3的情况进行暴力求解。{for(x=1;x<=1100;x++){if(Pow(x,z) >= k) break;//剪枝for(y=x+1;y<=1100;y++){long long ans = Pow(x,z)+Pow(y,z) + x*y*z;if(ans == k){ant++;break;}else if(ans > k || ans < 0) break;//剪枝}}}printf("%lld\n",ant);}return 0;
}
杭电acm 4282 A very hard mathematic problem相关推荐
- 杭电acm第2304题答案c语言,【转】杭电ACM试题分类
注:网上搜的 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 ...
- 【杭电ACM】1097 A hard puzzle
[杭电ACM]1097 A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...
- 杭电ACM刷题(1):1002,A + B Problem II
最近忙于考试复习,没有多少可供自己安排的时间,所以我利用复习之余的空闲时间去刷刷杭电acm的题目,也当对自己编程能力的锻炼吧. Problem Description I have a very si ...
- 杭电acm2151题java的解法,杭电ACM题型分类
杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...
- 杭电acm a+b问题
杭电acm 1000 a+b问题代码 int main() { int a,b; for(;~scanf("%d%d",&a,&b);printf("%d ...
- 杭电ACM 1174
//身高,又称身长,是指一个人从头顶到脚底的身体长度. //杭电ACM 1174 爆头 #include<iostream> #include<cmath> using nam ...
- 杭电ACM(HDUOJ)试题分类
杭电ACM试题分类 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最 ...
- 杭电ACM题目类型整理
版权声明:(╯3╰) 转载请注明: http://blog.csdn.net/bat67 杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 10 ...
- 杭电acm 2022
海选女主角 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 杭电acm的第1000题c语言解法
首先我选择的是c语言的解法,开始是输入如下的答案: #include "stdio.h" int main(void) { long long a,b; scanf("% ...
最新文章
- (转) MiniUI使用
- Ultrahaptics公司为Holodeck型触觉关闭了2300万美元的资金回合
- PAT甲级题目翻译+答案 AcWing(图论)
- 如何阻止ajax自动重定向_重发和重定向有什么区别与重定向应用
- 小型的网站服务器配置,中小型网站服务器配置参考
- 点击一次铵钮产生一个新文本框,分别输入值,然后获取
- lucene 入门整理
- 视图机制对于数据库的安全意义
- linux终端 打开光驱,ubuntu如何挂载光盘? Ubuntu下中手动挂载光盘的教程
- 简单计算器 -python
- Nexus下载安装及对接
- echarts地图设置label引导线
- 用python计算内部收益率
- 和威金作者的聊天记录 (附:VIKING专杀及杀毒思路)
- flutter TextField删除文字后光标跑到文字末尾
- 躲避地震,不要钻入桌子下方
- 8月1号起 银行卡、支付宝、微信的这些费用可以省了!
- 学习路之html--扒取整站网页----扒站神器(Mac版跟window版)
- linux构建widi显示服务,如此简单 Intel WiDi无线高清设置教程
- 汽车电子系统网络安全指南与汽车信息物理融合系统网络安全指南
热门文章
- 老杜java_老杜最新Java零基础视频教程(适合Java 0基础,Java初学入门)
- ARM 汇编语言教程
- 微信小程序动画效果集合
- 关于STM32、温度传感器论文的参考文献
- 微型计算机控制技术赖寿宏版课后答案,微型计算机控制技术答案(赖寿宏)
- 信息论与编码冯桂周林著答案_信息论与编码(信息与通信工程高等学校电子信息类专业系列教材)...
- 国科大2018级信息论考试复习
- Fbinst增强版 命令详解
- 猎豹网校java版算法_猎豹网校JAVA语言数据结构与算法视频教程 Java语言
- 黑客帝国,社会化网络