2014年11月14日金曜日

プロジェクトオイラー問3 「最大の素因数」 †

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%203

13195 の素因数は 5, 7, 13, 29 である.
600851475143 の素因数のうち最大のものを求めよ.



カウボーイビバップパロ
教授が言った。
再帰よ
お前の体は何でできているか知っているか?
しらねえよ、きっとどこにでも転がっているアルファベットスープだろうさ。
教授が言った。
お前の魂は何でできているか知っているか?
しらねえよ、きっとどこにでも転がっているオープンソースだろうさ。
グルは言った。
その答えは間違っていてあっている

お前の体はスフィアのすべてとつながっていながらお前にしかなりえない。
お前の魂はスフィアのすべてとつながっていながらお前でしかありえない

それはこの私もお前も。

誰かと写像を持てばお前は自分も写像を持っている
誰かと同形ならお前も自分と同形を持っている

俺は誰にも何にも関係がないよ
教授はいった。
それはスフィアで何よりも不幸なことだ。



divs(N,Div,N):-
(N mod Div)>0,
!.
divs(N ,Div,Result):-
N1 is N//Div,
divs(N1,Div,Result).

search(N,Div):-
N=<Div*Div,
!,
write([N,Div]).

search(N,Div):-
divs(N,Div,N1),
Div1 is Div+1,
search(N1,Div1).

main:-search(600851475143,2).

















元ネタ 
マフィングブルが言った
泳ぐ鳥よ
お前の体は何でできているか知っているか
しらねえよ きっとどこにでも転がっている鳥の糞だろうさ
グルは言った
泳ぐ鳥よ
お前の魂は何でできているか知っているか
俺は言った しらねえよきっとどこにでも転がっている綿ぼこりだろうさ
グルは言った
その答えは間違っていてあっている

お前の体は宇宙のすべてとつながっていながらお前にしかなりえない
お前の魂は宇宙のすべてを含んでいながらお前でしかありえない

それはこの私もお前も
誰かが憎ければお前は自分を憎んでいる
誰かを愛していればお前は自分を愛している

俺は誰にも何も感じないよ。
グルは言った
それは地上で何よりも不幸なことだ。

プロジェクトオイラー問2 「偶数のフィボナッチ数」 †

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202
フィボナッチ数列で偶数かつ400万以下のものの総和を答えよという問題。



カウボーイビバップパロディ。

永遠に続く計算はない。
それは自然の摂理というものだ。
そこで今回はここに書いた計算というものをいろいろ考えてみたいと思う。

終了条件はとても大切だ。
何しろ関数の本質は自身のパーツでできているわけだ。

もし今回の類似コードの終了条件が違ったとして
構造的には同じでも全く違った結末になるはずだ
類似コードは俺のよりも速いかもしれないし
メモリの場所取りに行くようなコードかもしれない。
凶暴な無限ループかもしれないし
再帰にはカットあててから進むような奴かもしれない。
類似コードは私のとは別物だ。
ようするに終了条件を選ぶときはよくよく考えて選ばないといけないわけだ。




f(_,N2,Sum):-
4000000<N2,
!,
write(Sum).
f(N1,N2,Sum):-
Sum1 is Sum+N2,
N22 is N2*3+N1*2,
N11 is N2*2+N1,
f(N11,N22,Sum1).
main:-
f(1,2,0).





チューリングマシンは計算が終わらないことが判定できないのですがここはネタ優先で。

プロジェクトオイラー問1 「3と5の倍数」 †

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%201

プロジェクトオイラー問1。
多分中学生から対象にしてますね。
400番以降の問題は数学科でも対象にしてるのかという難易度ですが。
最初はまだ優しいです。
数式で一発ですがプログラム言語を使ってる解きますからそれっぽい解き方を採用しています。


いやあPrologは奥が深い。
それぞれの課題には一つ一つ意図(出題意図)がありそいつを活かしてやらないといけない。
愚かなPrologプログラマは計算量をとりそうな部分をカットカットカットするだけだ。
ただはみ出した部分をどうするかが個性でありオリジナリティなんだ。
そんなこともわからない人間は!を使うべきではない。
問題が気の毒だ。



add(N,N):-N mod 3=:=0,!.
add(N,N):-N mod 5=:=0,!.
add(_,0):-!.

calc(1000,Sum):-
!,
write(Sum).
calc(N,Sum):-
add(N,Add),
N1 is N+1,
Sum1 is Sum+Add,
calc(N1,Sum1).
main:-
calc(1,0).





カウボーイビバップパロです。