Problem Description
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.
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.
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 0Hint9 = 1^2 + 2^2 + 1 * 2 * 2 53 = 2^3 + 3^3 + 2 * 3 * 3</pre>#include <stdio.h><br />#include <math.h><br />#include<algorithm><br />#include<iostream><br />using namespace std;<br />long long pow(long long x, int z)<br />{<br /> long long temp = x;<br /> for(int i=2;i<=z;i++)<br /> x*=temp;<br /> return x;<br />}<br />int main()<br />{<br /> int n;<br /> while(scanf("%d",&n)&&n)<br /> {<br /><span style="white-space:pre"> </span>int ans=0;<br /><span style="white-space:pre"> </span>int temp;<br /><span style="white-space:pre"> </span>temp=(int)sqrt(n);<br /> if(temp*temp==n)<br /> ans+=(temp-1)/2;<br /> for(int z=3;z<31;z++)<br /> {<br /> for(long long x=1;;x++)<br /> {<br /> long long u=pow(x, z);<br /> if(u>=n/2)<br /> break;<br /> for(long long y=x+1; ;y++)<br /> {<br /> long long v=pow(y,z);<br /> if(u+v+z*x*y>n)<br /> break;<br /> else if(u+v+z*x*y==n)<br /> {<br /> ans++;<br /> break;<br /> }<br /> }<br /> }<br /> }<br /> printf("%d\n",ans);<br /> }<br /> return 0;<br />}<br /></div></div>