pho@自習室

2011-12-20

38,39,40,41,42,43問目

| 22:04

38問目

4桁選ぶところでitertoolsの順列関数を使った。あとは地道に。

39問目

三角形ができる条件ということで絞り込んでみた。

40問目

1桁、2桁、3桁などなどでどうなるか例を出して考えてから、関数を定義して解いた。

41問目

8桁、9桁だと3で割りきれてしまうので、素数になるためには7桁。あとは地道に。

42問目

三角数を求めてリストに突っ込んでおいて、後から導出したのがそこにあるか調べた。

43問目

順列をつかって列挙して、あとはそれぞれが割り切れるか調べた。

2011-12-13

33,34,35,36,37問目

| 21:23

33問目

分母と分子を1桁ずつ消しても同じ数になるってのは、分母が1の位、分子が10の位を消す場合が考えられる。(10a+b)/(10b+c)=a/cこれを展開して、a,b,cを変化させながら合うものを探した。

34問目

階乗を求める関数を用意して、ひたすら探す。

35問目

100万まで素数を求めて、どこかの桁に偶数が入っているものを除外して、ひたすら回転させる。

36問目

まず10進数でどちらから読んでも同じものをリストアップして、それから2進数で探す。両端が1になるので偶数を最初に除外。

37問目

片側にずらしていって、その後逆側にずらしていく。4,6,8,0のどれかを含んでいるのは該当しないので除外。1の位が9の奴も除外して少し計算を速めた。

2011-12-08

31,32問目

| 00:05

31問目

どういうコインの組み合わせで2ポンドが作れるかという問題。わりと地道にやった。

32問目

かなりてこずった。1桁*4桁=4桁と2桁*3桁=4桁の二通りしか全部で9桁になるのはないと判断。とりあえず9個の数値から5つを選ぶ。そして積を求めて、積一つ一つが重ならないように気をつける。積に0を含んだものを除外し忘れてけっこう悩んだ。

2011-12-05

29,30問目

| 23:47

完全にgistからgithubに移行した。こっちのほうが便利だ。

https://github.com/yosuketanaka/project-euler

29問目

これはいくつか例を挙げればわかるけど、2^4=4^2,2^100=4^50みたいなところが重なる。99*99から重なる部分を引けばいい。2と3の累乗はたくさんあるので置いといて、5,6,7,10をまず考える。それぞれ49ずつ差し引けばいい。2と3については実際に一つずつ当てはめていって、重なったら数字を繰り上げて重ならなかったら要素を追加していったら求められた。

30問目

5乗の和だとmax何桁になるのかなと思って計算したら1000000よりは小さそう。そこで総当りで計算。大した計算はしてないのでそんなに時間はかからない。

2011-12-03

26,27,28問目

| 13:00

久々のプロジェクトオイラー。1ヶ月ぶりだとけっこう忘れてる。日々書いてないといろいろやり方を忘れるんだろうな。

26問目

循環小数の問題。10倍とか100倍したものと差分を取ったらきれいに相殺されるってのを使おうと思ったが、小数点以下の計算桁数が厳しそうなので方針転換。要は9倍、99倍、999倍するわけだから、9とか99とか999とかが割り切れるのかどうかを考えればいいことに気づいた。もちろん循環しないものもあるのでそちらを先に考える。2**9と5**4を考えれば1000より小さい循環しない小数はカバーできそう。2**9と5**4の積を取って、それに9、99、999、、、、を順に掛けていって割り切れるまでやって、一番最後まで割り切れなかったものを見ればいい。思ったとおり素数だった。

27問目

これは数学ガールさまさま。「例示は理解の試金石」ということでn**2+a*n+bのnに0,1,2を代入。この2次式が素数になるにはbは素数になるのかとか、1+a+bが素数でbも素数ならbが2以外のときはaは奇数になるとか、簡単にわかって素晴らしい。続いて、ミルカさんの言葉を思い出す。「ひとこと言っておくよ。グラフを描かないのが、きみの弱点だ。数式をいじることだけが数学じゃない」

y=x**2+x+41

y=x**2-79*x+1601

x軸方向にシフトしただけじゃないか、と気づく。このシフトの度合いでどのくらい素数が生成されるか決まるわけか。とりあえず1000より小さくしないといけないから、1601から下がっていって1000以下の素数と最初に一致するところを探す。で、実際にシフトさせてみる。意外とシンプルにできた。

28問目

ぐるぐる回ってるけど要は数列だよなーって思っていくつか書きだしてみた。2ずつ増えて、4ずつ増えて、6ずつ増えてるのが確認できた。1001までやるとなると1000ずつ4回増えたところで止めればいい。そのように書いて出来上がり。

gistは1つ10個までしかファイルが入らなくて、サイトにアクセスするのも面倒なので、githubに全部移動させた。これでコマンドラインで完結するので素晴らしい。