プロジェクトオイラー

大晦日からはじめました。気が向いた時にやって現在27問くらい解きました。

C++の自前多倍長は正直クズなので、Pythonとか使えるようになりたい。

本当に簡単な問題しか解いてないと思うので、ちょっとずつ難しいのにも手を出そうと思います。


感想とかした解法とか

1

手計算: (3の倍数の総和) + (5の倍数の総和) - (15の倍数の総和)

2

シミュレート

3

main(){system("factor ...");}

4

全探索

5

手計算: 1~20の最小公倍数

6

シミュレート

7

prime[100000] (0-indexed)

8

5つの連続している桁の積の最大。なんか自分で見つけられた。うれしかった。

9

工夫すると全探索でも9万回無いくらいのループで済んだ。

10

long long

11

番兵・方向配列などを使い効率的な実装をすると10分かからない。

使わないとおそらく地獄。

12

 *1s[s.find_first_of(",\"")]=' ';

してstringstreamにつっこんでパースしてソートして・・・

24

t = "0123456789";

do{ ... }while(next_permutation(t.begin(),t.end()));

で、100万カウント目で出力。dfsしてもよかったけど全く同じこと。

25

多倍長 + DP。残念多倍長に対しての1000桁はやや重たいんで簡便してもらえますか。4桁区切りだからまだそこまでって感じだけど。

26

AOJにこんな問題あったなーみたいな感じで解いた。

47

シミュレート。解が見つかるまでループ

48

面倒くさかったのでpython様に頼りました。3行で実装できるのはあまりにも素晴らしすぎた。

49

素数配列つくる。

表カウントしつつ埋めていって最後に表[ 素数配列[i] ]の値が最も大きいやつ出力。

52

全探索。桁操作するときにもstringstreamすごく便利だ。

*1:i-1)*i)/2で解が見つかるまでループ回しつつ、その約数の個数求めた。

13

多倍長

14

コラッツ兄貴オッスオッス。100万以下の全ての値に対してシミュレート。途中で大変な値になったりする可能性があるので、シミュレートはlong longでしないとしぬ。

15

long long,典型的DP(本格的~みたいなノリで)

16

多倍長。

18

幅優先探索でもいいけどめんどいのでDPした。AOJにこれのだるい版(ひし形)がある。

20

多倍長。

21

実装面倒くさかったのでWikipedia+Windows Calc。

22

やるだけなんだけど重い(実装よりも処理が)。

while(~s.find_first_of(",\""