34^2 − 27^2 − 20^2 = 12^2 − 9^2 − 6^2 = 27
n = 1155 は, 方程式がちょうど10個の解を持つ最小の値である.
ちょうど10個の解を持つような n は, 100万までにいくつ存在するか?
x=y+a
z=y-a
とすれば
x^2-y^2-z^2=y(4a-y)です。
aの定義より
y>a>y/4で
y(4a-y)が100万を越えないので探索範囲は狭く全探索するだけです。
#include<stdio.h>
const int LIMIT=1000*1000;
int memo[LIMIT+1]={0};
int main(){
for(__int64 y=2;y<=LIMIT;y++){
for(__int64 a=y/4+1;a<y;a++){
__int64 n=y*(4*a-y);
if(n>=LIMIT)break;
memo[(int)n]++;
}
}
int ans=0;
for(int i=2;i<LIMIT;i++){
if(memo[i]==10)ans++;
}
printf("ans=%d\n",ans);
}
最終更新:2015年11月17日 03:28