プロジェクトオイラー問135

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%20135
正の整数x, y, z が等差数列として与えられたとき, x^2 - y^2 - z^2 = n がちょうど2個の解を持つような最小の正の整数 n は, n = 27である.

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