/**find a formula which satisfy a^3=b^3+c^3+d^3*/
·关键在于去重减少预算量
方法:把要用到的立方都存储起来,防止重复计算。
·排除显而易见的不可能的情况,如当 a^3<b^3+c^3+d^3 即 break
·头文件math.h
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
int n;
int cube[101]; //store all cube from 1 to n
int a,b,c,d;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cube[i]=i*i*i;
}
/**enumerate */
for(a=5;a<=n;a++)
{
for(b=2;b<a-1;b++)
{
if(cube[a]<cube[b]+cube[b+1]+cube[b+2]) break; //constraint condition of early termination
for(c=b+1;c<=a-1;c++)
{
if(cube[a]<cube[b]+cube[c]+cube[c+1]) break;
for(d=c+1;d<a;d++)
{
if(cube[a]<cube[b]+cube[c]+cube[d]) break;
if(cube[a]==cube[b]+cube[c]+cube[d])
{
printf("Cube=%d triple=(%d,%d,%d)\n",a,b,c,d);
}
}
}
}
}
system("PAUSE");
return EXIT_SUCCESS;
}