根据这位大神思路写的代码: http://blog.csdn.net/zhuhuangjian/article/details/12757735
一开始题目没读懂,以为要求a^3+b^3==c^3的个数......
已知x,y(1<=x,y<=10^8) ,求在[x,y]之间的存在多少组a,b,c满足a^3+b^3=c*10+3;
直接暴力枚举a,b,不要被10^8次方吓到,因为a,b,c<=y,也就是 (y*10+3)的1/3次方可以作为暴力的上界,暴力够了
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <list>
#define LL long long
#define INF 0x7fffffff
#define FIN 0x80000000
using namespace std;
int x,y;
LL cube(int k)
{
return (LL)k*k*k;
}
bool ispan(LL tmp)
{
if(tmp%10==3)
{
tmp/=10;
if(tmp>=x&&tmp<=y) return true;
}
return false;
}
int main()
{
int cas=0;
while(scanf("%d %d",&x,&y)!=EOF)
{
int cnt=0;
LL mm=y*15;//枚举上界
LL tmp;
for(int i=x;2*cube(i)<mm;i++)
{
if(ispan(2*cube(i))) cnt++;
for(int j=i+1;j<=y&&(tmp=cube(i)+cube(j))<mm;j++)
if(ispan(tmp)) cnt+=2;
}
printf("Case %d: %d\n",++cas,cnt);
}
}