Problem 65 「e の近似分数」 †
eの近似分数の100項めの分子の各桁の和を求める問題。
指定されたとおりに連分数計算を実装するだけです。
next(1,1):-!.
next(N,N2):-!,N2 is N+2.
list(1,[X,_,_],[X]):-!.
list(L,[X,Y,Z],[X|Result]):-
next(X,X1),
L1 is L-1,
list(L1,[Y,Z,X1],Result).
gcd(0,G,G):-!.
gcd(A,B,G):-
C is B mod A,
gcd(C,A,G).
calc([],U,D):-
!,
U1 is U+D*2,
D1 is D,
gcd(U1,D1,G),
U2 is U1//G,
wa(U2,0,Ans),
write(Ans).
calc([X|Xs],U,D):-
U1 is U+D*X,
D1 is D,
gcd(U1,D1,G),
U2 is U1//G,
D2 is D1//G,
calc(Xs,D2,U2).
wa(0,Sum,Sum):-!.
wa(N,Sum,Result):-
N1 is N//10,
Sum1 is Sum+(N mod 10),
wa(N1,Sum1,Result).
main:-
list(99,[1,2,1],List),
reverse(List,[S|List1]),
calc(List1,1,S).
最終更新:2014年12月12日 12:54