"血をもって書け。そうすればあなたは、血が精神だということを経験するだろう。"

Project Euler

Problem22

5000個以上の名前が書かれている46Kのテキストファイルfilenames.txt を用いる. names.txt http://odz.sakura.ne.jp/projecteuler/index.php?plugin=attach&refer=Problem%2022&openfile=names.txt まずアルファベット順にソートせよ.のち, 各名前についてア…

Problem21

d(n)をnの真の約数の和と定義する。(真の約数とはn以外の約数のことである。) もし、d(a) = b かつ d(b) = a を満たすとき、aとbは友愛数(親和数)であるという。例えば、220の約数は1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110なのでd(220) = 284とである…

Problem20

n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。100! の各桁の数字の合計を求めよ。 haskell main=print $ sum_ $ product $ [1..100] sum_ n |n<10 =n |otherwise=(+(mod n 10)) $ sum_ $ div n 10 answer 648

Problem19

次の情報が与えられている。 * 1900年1月1日は月曜日である。 * 9月、4月、6月、11月は30日まであり、2月を除く他の月は31日まである。 * 2月は28日まであるが、うるう年のときは29日である。 * うるう年は西暦が4で割り切れる年に起こる。しかし、西暦が400…

Problem 10

10以下の素数の和は2 + 3 + 5 + 7 = 17である. 200万以下の全ての素数の和を計算しなさい. haskell 最初に書いたプログラムは70000までの素数の和程度でもいっぱいいっぱい。 『入門Haskell』にも載っていたProblem7(http://d.hatena.ne.jp/satzz/20080421/1…

Problem17

1 から 5 までの数字を英単語で書けば one, two, three, four, five であり、全部で 3 + 3 + 4 + 4 + 5 = 19 の文字が使われている。では 1 から 1000 (one thousand) までの数字をすべて英単語で書けば、全部で何文字になるか。注: 空白文字やハイフンを数…

Problem13

以下の50桁の数字100個の総和の上位10桁を求めよ。(略) http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2013 Haskell 数字は"p13num"に書いてあるとする。 IOモナドを使って main=readFile "p13num" >>= print . take 10 . show . sum . map (\x->…

Problem16

2^15 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。同様にして、2^1000 の各数字の合計を求めよ。 Haskell main=print $ sumdigit $ 2^1000 sumdigit a |a<10 = a |otherwise = mod a 10 +(sumdigit $ div a 10) answer 1366

Problem5

2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。 では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。 Haskell main=print $ lcm_ [1..20] lcm_ []=1 lcm_ (x:xs)=lcm x…

Problem9

ピタゴラスの三つ組(ピタゴラスの定理を満たす整数)とはa Haskell main=print $ head [a*b*(1000-a-b)|a<-[1..(floor $ 1000/3)],b<-[a..1000],a^2+b^2==(1000-a-b)^2]C #include<stdio.h> int main(void){ int a,b,c; for(a=1;a<1000/3;a++){ for(b=a;b<=1000;b++){ </stdio.h>…

Problem8

以下の1000桁の数字から5つの連続する数字を取り出してその積を計算する。そのような積の中で最大のものの値はいくらか73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501…

Problem7

素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり、6番目の素数は 13 である。10001 番目の素数を求めよ。 Problem3のid:smlyの素数列生成コードがあまりに美しかったのでまるまる借りてしまった・・・ http://codepad.org/OlhYJKCl Haskell main =…

Problem6

最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。 1² + 2² + ... + 10² = 385 (1 + 2 + ... + 10)² = 3025これらの数の差は 3025 - 385 = 2640 となる。同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。 Has…

【随時更新】Project Eulerを解いていくよ

Project Euler http://odz.sakura.ne.jp/projecteuler/index.php?Project%20Euler 1-10 Problem Answer 1 C,Haskell 2 C,Haskell 3 Haskell 4 C,Haskell 5 Haskell 6 C,Haskell 7 Haskell 8 C,Haskell 9 C,Haskell 10 Haskell 11-20 13 Haskell 16 Haskell 1…

Problem3

13195 の素因数は 5、7、13、29 である。600851475143 の素因数のうち最大のものを求めよ。 最初に書いたのがこれ。「素数列を出してから計算」したら9桁くらいから計算時間が急激に伸び、結局12時間かかっても終わらなかった。しかも最大素因数求めてないこ…

Problem4

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。 Haskell main=print $ maxim [k|k<-prod,reverse (…

Problem1

10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、これらの合計は 23 になる。同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。 Haskell main = print $ sum $ map hit [1..999] hit::Int…

Problem2

フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。 Haskell main=print $ sum $ filter even $…