HDU 4282 A very hard mathematic problem
题意: 已知K,找出 满足等式 X^Z + Y^Z + XYZ = K 的X,Y,Z组合数。
分析: 固定X,Z,二分枚举 Y。
#include<stdio.h> #include<string.h> #include<math.h> #define clr(x)memset(x,0,sizeof(x)) long long x[50000]; int main() { long long top,i,k,z; while(scanf("%I64d",&k),k) { top=0; clr(x); for(i=1;i*i<=k;i++) x[i]=i; top=i-1; long long res=0; z=2; while(top>1) { for(i=1;i<=top&&x[i]*i<=k;i++) x[i]*=i; top=i-1; for(i=1;i<top;i++) { long long l=i+1,r=top,mid,flag=0,tmp=-1; while( l<r ) { mid=(l+r)>>1; tmp=x[i]+x[mid]+z*i*mid; if(tmp>=k) r=mid; else l=mid+1; } if(x[i]+x[r]+z*i*r==k) res++; } z++; } printf("%I64d\n",res); } return 0; }