※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「prolog勉強プロジェクトオイラー21~30」の編集履歴(バックアップ)一覧に戻る

prolog勉強プロジェクトオイラー21~30 - (2013/07/09 (火) 19:53:43) の1つ前との変更点

追加された行は青色になります

削除された行は赤色になります。

+プロジェクトオイラーの問題をPrologで解くページ。
+創価学会の皆さまから原小学校の算数までしかできないと言われている堀江伸一さんがこのページのコードを書いているようです。
 
+
+独り言
+手につけられるグフのハンドマシンガン3980円とか売ってたら買うんだけどな。
+ニッチだから売られないか。
+今日見つけたもの。
+2チャンネル発の文化 今北産業物へのリンク。
+http://matome.naver.jp/odai/2126386911055428601
+
+
+
+
+*問い21
+http://projecteuler.net/problem=21
+10000以下の友愛数の和を求めよという問題。
+そのまま定義通り計算するだけです。
+複数の関数で一つの関数を表現するPrologて独特だよな。
+
+ yakusuu_sum(1,_,1,Sum,Sum):-!.
+ yakusuu_sum(N,M,1,Sum,Sum1):-N<M*M,!,Sum1 is Sum*(N+1).
+ yakusuu_sum(N,M,Multi,Sum,Result):-
+	0=:=N mod M,!,
+	N1 is N//M,
+	Multi1 is Multi*M+1,
+	yakusuu_sum(N1,M,Multi1,Sum,Result).
+ yakusuu_sum(N,M,Multi,Sum,Result):-
+	Sum1 is Sum*Multi,
+	M1 is M+1,
+	yakusuu_sum(N,M1,1,Sum1,Result).
+ yakusuu_sum_w(N,Result):- 
+	yakusuu_sum(N,2,1,1,Result).
+ 
+ check(N):-yakusuu_sum_w(N,N1),N2 is N1-N,N\==N2,yakusuu_sum_w(N2,N3),
+         N4 is N3-N2,N=:=N4.
+ calc(N):-
+ 	between(2,10000,N),check(N).
+ sum([],Sum,Sum):-!.
+ sum([X|Rest],Sum,Result):-Sum1 is Sum+X,sum(Rest,Sum1,Result).
+ 
+ main21:-findall(N,calc(N),List),sum(List,0,Ans),write(Ans).