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;
}

 

posted @ 2012-09-11 08:04  'wind  阅读(244)  评论(0编辑  收藏  举报