Life Goes On

まあまあだけど楽しんでる方です

2008-04-01から1ヶ月間の記事一覧

50問目

http://projecteuler.net/index.php?section=problems&id=50 41 = 2 + 3 + 5 + 7 + 11 + 13は6つの連続する素数の和として表現できる。百万未満の素数で、最も長く連続する素数の和となるものを求める。 連続する素数の和が百万未満で、長さが最も長くなると…

48問目

http://projecteuler.net/index.php?section=problems&id=48 11 + 22 + 33 + ... + 10001000の下10桁を求める。 僕は何もしてません。 main = print $ euler048 1000 10 euler048 :: Integer -> Int -> String euler048 m n = reverse $ take n $ reverse $ …

49問目

http://projecteuler.net/index.php?section=problems&id=49 1487, 4817, 8147のように、(i)どれも素数で、(ii)それぞれの数が他の数の並べ替えとなっている、4桁の等差数列を見つけ、それを繋げた12桁の数を求める。 手順は↓の通り。間違ってはいませんが、…

47問目

http://projecteuler.net/index.php?section=problems&id=47 2つの素因数を持つ数が最初に2つ連続するのは14 = 2 × 7、15 = 3 × 5のときである。4つの素因数を持つ数が最初に4つ連続するとき、その最初の値を求める。 素因数分解を行うのですが、そのと…

46問目

http://projecteuler.net/index.php?section=problems&id=46 Christian Goldbachは、「素数でない奇数は全て、平方数の2倍と素数の和として表せる」と予想したが、これは誤りだった。この予想を満たさない最小の数を求める。 どう表現するかというところはあ…

45問目

http://projecteuler.net/index.php?section=problems&id=45 五角数でも六角数でもある三角数のうち40755の次の数を求める。 六角数は三角数に含まれるので、五角数でかつ六角数のものを求めれば十分だったようです。そんなこととは知らず、真面目に求めてし…

勉強会

今日はid:nobsun主催の勉強会でした。 普段は会わないような人たちと話ができて、刺激になります。 どうでもいいのですが、Ratioモジュールを覚えたての頃、ratios :: [Ratio] とか定義しようとしてコンパイラに怒られ、よく分からないまま渋々 ratios :: [R…

私信

大きなお世話です。でもカミさんにも同じこと言われた…。

44問目

http://projecteuler.net/index.php?section=problems&id=44 Pj+Pk と Pk-Pj がともに五角数であるような2つの五角数 Pj、Pk について、最小の|Pk - Pj|を求める。 解けたのですが、遅い…。これは何とかしないと。 改善案求む!! main = print $ euler044 …

43問目

http://projecteuler.net/index.php?section=problems&id=43 0から9の数字を1回ずつ使って作る数について1つ目の数字をd1、2つ目の数字をd2とするとき、d2d3d4が2で割り切れ、d3d4d5が3で割り切れ、d4d5d6が5で割り切れ、…、d8d9d10が17で割り切れるような数…

42問目

http://projecteuler.net/index.php?section=problems&id=42 英単語に対して、「SKY : 19 + 11 + 25 = 55」のように得点を計算する。約2000個の単語を含むファイルの中に、得点が三角数となる単語がいくつあるか求める。 これも問題をそのまま書き下すだけ。…

41問目

http://projecteuler.net/index.php?section=problems&id=41 もう一問。 1からnまでの数字を1回ずつ使って作った素数のうち、最大のものを求める。 大きいものから順に調べていって、最初に見つかったものを返します。 import Data.List main = print $ eule…

40問目

http://projecteuler.net/index.php?section=problems&id=40 0.123456789101112131415161718192021... のように自然数をつなげて作った小数のn番目の数字をdnとするとき、以下の値を求める。 d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000 これは…

39問目

三角形の周の長さp=120のとき、直角三角形になるような辺の組は以下の3通りある。 {20,48,52}, {24,45,51}, {30,40,50} 1000未満のpについて、組合せの数が最大となるものを求める。 a c で解を限定していますが、まだちょっと遅いです。制約条件が他にもあ…

38問目

192384576は、192×=192, 192×2=386, 192×3=576をつなげた数である。このように、ある数に1,2,..n(n>1)をかけた数をつなげて、1から9の数字が1回ずつ現れる数を作るとき、その最大のものを求める。 何の工夫もありませんが、問題を忠実に実装したら解けました…

37問目

3797→797→97→7、3797→379→37→3というように左右どちらから切り落としていっても全て素数となるような素数のうち、最初の11個を足し合わせる。 import Data.List main = print $ sum $ euler037 euler037 :: [Int] euler037 = take 11 $ filter truncatable $…

36問目

百万未満の数で、2進表記でも10進表記でも回文になるようなものを全て足し合わせる。 showIntAtBaseという関数を知らず、最初は自分で書いてしまいました。 import Data.Char import Numeric main = print $ sum $ euler036 999999 euler036 :: Int -> [Int]…

35問目

http://projecteuler.net/index.php?section=problems&id=35 197のように971,719と回転させても素数となるような素数が百万未満でいくつあるか求める。 素直に求めていきます。 import Data.List main = print $ length $ euler035 1000000 euler035 :: Int …

34問目

http://projecteuler.net/index.php?section=problems&id=34 各桁の数字の階乗の和が元の数と等しくなるような数を全て足し合わせる。 9の階乗は6桁なので、求める数は高々7桁だと分かります。(それ以上だと元の数の桁数が階乗の和の桁数より必ず大きくなる…

33問目

http://projecteuler.net/index.php?section=problems&id=33 49/98=4/8のように、分母と分子から同じ数字を除いても元の値と等しくなるような分数(1未満で分母と分子がともに2桁)を全て掛け合わせて、その分母を求める。 Ratioモジュールが便利です。 impo…

18問目再び

Project Euler - IMHO経由でEuler problems - HaskellWikiを知り、つらつら眺めてたのですが、以前に解いた18問目のもっとシンプルなコードが載ってました。 scanではなくfold、l(eft)ではなくr(ight)を使うのがポイントです。 ちょっと悔しい。 main = do…

32問目

http://projecteuler.net/index.php?section=problems&id=32 39 × 186 = 7254 のように、a × b = c の各数字を合わせると1から9の数字が1回ずつ現れる a × b を、すべて求める。 要件を満たすのは1桁×4桁、2桁×3桁のときなので、その範囲で全部調べます。 im…

31問目

http://projecteuler.net/index.php?section=problems&id=31 2ポンド(200ペンス)を1,2,5,10,20,50,100,200ペンスの硬貨で作るとき、何通りの組合せがあるか求める。 main = print $ euler031 [200, 100, 50, 20, 10, 5, 2, 1] 200 euler031 :: [Int] -> In…

30問目

http://projecteuler.net/index.php?section=problems&id=30 各桁の数字の5乗の和が元の数字と等しくなるような数の和を求める。 import Data.Char main = print $ sum $ euler030 5 euler030 :: Int -> [Int] euler030 n = filter judge [2..9^(n+1)] wher…

28問目

http://projecteuler.net/index.php?section=problems&id=28 1辺が1001の正方形に螺旋状に並んだ数字のうち、対角線にあるものの和を求める。 main = print $ euler028 1001 euler028 :: Int -> Int euler028 n = sum $ map calc [1,3..n] calc :: Int -> I…

29問目

http://projecteuler.net/index.php?section=problems&id=29 2以上100以下のa,bに対してabがいくつあるか、重複するものを除いて答える。 import Data.List main = print $ euler029 100 euler029 :: Integer -> Int euler029 m = length $ nub $ [a ^ b | a …

27問目

http://projecteuler.net/index.php?section=problems&id=27 n2 + an + b, |a| で表される数列があったとき、連続する素数の数が最大となるようなa,bの積を求める。 n=0,1のときの条件からbが素数、a>-bだと分かるのでそれで範囲を狭めて、あとはひたすら調…

26問目

http://projecteuler.net/index.php?section=problems&id=26 1000未満の数dに対して1/dを循環小数で表したときに循環する部分の長さの最大値を求める。 下のコードが最初に書いたものです。間違いはないし処理時間も問題ないのですが、明示的に再帰している…

25問目

http://projecteuler.net/index.php?section=problems&id=25 フィボナッチ数列で1000桁になるのは何番目かを求める。 main = print $ euler025 999 euler025 :: Int -> Int euler025 n = length $ takeWhile (< 10 ^ n) fibs fibs :: [Integer] fibs = 0 : 1…

24問目

http://projecteuler.net/index.php?section=problems&id=24 0から9までの数字で作る順列を辞書順に並べたときに、百万番目の順列を求める。 順列を作る部分はよくある問題みたいです。 http://www.sampou.org/cgi-bin/haskell.cgi?Programming%3a%b6%cc%bc%…