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

Problem 57 「平方根の近似分数」 †
2の平方根を連分数で表した時、1000項めまでの近似値の分子桁数が分母桁数より桁数が多いものはいくつあるか答えよ。

gcd(0,B,B):-!.
gcd(A,B,G):-
	R is B mod A,
	gcd(R,A,G). 

check(0,0):-!,fail.
check(_,0):-!.
check(U,D):-
	U1 is U//10,
	D1 is D//10,
	check(U1,D1).

calc(1001,_,_,_):-!,fail.
calc(_,U,D,1):-
	U1 is U+D,
	D1 is D,
 	gcd(U1,D1,G),
	U2 is U1//G,
	D2 is D1//G,
	check(U2,D2).
calc(T,U,D,Result):-
	U1 is U+D*2,
 	D1 is D,
	gcd(U1,D1,G),
	U2 is U1//G,
	D2 is D1//G,
	T1 is T+1,
	calc(T1,D2,U2,Result).

main:-
	findall(E,calc(1,1,2,E),Es),
	length(Es,Ans),
	write(Ans).
最終更新:2014年12月08日 19:56