2013-01-01から1年間の記事一覧

TCO2013 Round1C Div1 250

問題 配列の最初と最後だけがわかっていて、隣接する数字は高々dだけしか違わない。 配列のサイズがnだとわかっているとき、配列の中で最大となる数値を返す。 考え方 配列の最初からどんどん+dずつしていくのが左からの最大値、 配列の最後からどんどん+dず…

project euler 55

問題 ある数xとそれを反転させた数x'の和x+x'が回文数になる、または、その和とその和の反転させた数の和が回文数になる、または、、、という数を考える。 上記を満たさない数をLychrel数という。 50回以上和とその和の反転の和を出しても回文数にならなけれ…

project euler 50

問題 1000000以下で連続する素数の和が素数となる最大のものを求める。 考え方 素数のリストを作っておいて、実際に、全通りの和を求めて、その足し算の長さが長いものを調べていく。

project euler 38

問題 整数xと(1,2,...,n)の連結積(n>1)とは、 x*1 = aaa x*2 = bbb ... という計算をし、積をつなげた数aaabbb...をいう。 この連結積が9ケタのpandigital(=各桁が1〜9まで1回でてくるような数)になる最大のものを見つける。 考え方 桁数が9までしかないの…

project euler 56

問題 a,b 考え方 多倍長で、実際に試してみる。

project euler 53

問題 nCrで、1 考え方 パスカルの三角形を作ってカウント。 10^6より大きくなるものは、それ以降もその数値より大きくなるので、計算できなくてもよい。

project euler 52

問題 整数xの各桁の数字を並び替えたものが2*x,3*x,4*x,5*x,6*xになるような最小のxを求める。 考え方 各数値を分解するのを小さいほうから試してみる。

project euler 47

問題 ある整数iについて異なる素因数が4つになって、それがi,i+1,i+2,i+3でも成り立つ最小のiを求める。 考え方 小さいiから順に素因数分解を試していく。

project euler 66

問題 2 x^2-D*y^2=1 を満たす整数の組(x,y)でxが最小となるものを求める。 すべてのDについてxが最大になるDを返す。 考え方 上記はペル方程式といい、整数の組の解をもつが、かなり大きな数値となる。 ので、単純に試すだけでは時間がかかりすぎる。http://…

project euler 46

問題 奇合成数で、平方数の2倍+素数であらわせない最小の奇合成数を求める。 考え方 素数でない数値(合成数)を下から試していく。

project euler 45

問題 三角数かつ五角数かつ六角数である40755の次の数を求める。 考え方 適当にそれぞれ生成してメモしておく。 3回メモした数値が答え。

project euler 42

問題 三角数はn(n+1)/2で与えられる数である。 三角語とは、文字列のアルファベットをA=1,B=2,...と直して、各文字の数字の和が三角数になっているものをいう。 文字列が与えられるので、三角語がいくつあるか答える。 考え方 ある程度最初に三角数を列挙し…

project euler 41

問題 9ケタ以下の素数で、Pandigital数(各桁に1からnまでの数が1つずつ存在)である最大の数を求める。 考え方 next_permutationで9〜1桁の数値を作って調べる。 素数判定は素因数分解して、要素数が1かどうかで判定した。

project euler 40

問題 正の整数を連結して得られる、 0.123456789101112... の小数点以下1,10,100,1000,10000,100000,1000000位の数の積を返す。 考え方 実際に生成していって、積をもとめる。

project euler 39

問題 直角三角形の周囲の長さをpとして、p 考え方 すべて試す。

project euler 37

問題 10以上の素数で、左から桁を切り詰めても、右から桁を切り詰めてもすべてそすうになる素数は11個しかない。 その総和を求める。 考え方 すべて試す。 10000000未満で11個でてくるので、それらを足し合わせる。

project euler 36

問題 1000000未満で、10進数でも2進数でも回文数となる数の総和を求める。 考え方 すべて試す。

project euler 35

問題 循環素数とは、各桁を回転させて得られる数がすべて素数である数をいう。 197,971,719。 1000000未満の循環素数の数を数える。 考え方 すべて試す。

project euler 34

問題 3以上の正の整数で、各桁の階乗の和が元の整数と一致するような数の和を求めよ。 考え方 9!*6(=2177280) > 999999であることから10^7程度全探索すればよい。

project euler 33

問題 49/98を各桁を独立と考え、4/8のように(間違った操作を)することを考える。 このとき、1より小さくて、分子・分母が2ケタのそのような操作をしても正しい約分になるものが4つある。その四つの分数の積の既約分数の分母の値を答える。 考え方 試して4つ…

project euler 32

問題 39*186=7254のように各桁について1から9まで1つずつでてくるようなa*b=c形式の掛け算をpandigitalな積という。 そのようなcの総和を求める。 ただし、1通り以上a*bで同じcとなる場合は1回だけ数え上げる。 考え方 next_permutationで10ケタの順列を生成…

project euler 31

問題 1,2,5,10,20,50,100,200のコインが無数にある。 このコインを使って、200を作る組み合わせは何通りあるか。 考え方 dp[i]:=iを作る組み合わせのかず とすると、小さいコインから順番に、コインpを使うと、 dp[i+p] += dp[i] とできる。(dp[0]=1として、…

project euler 30

問題 各桁を5乗した数の和が、もとの数値と同じになる数の総和を求める。 考え方 実際に試す。 9^5 * 6=354294なので、6ケタ以下のものしかないはずなので、10^7ぐらい探す。

project euler 29

問題 2 考え方 多倍長を実装して、文字列とかで扱って、setなどでカウント。

project euler 28

問題 n*nの配列があり(nは奇数)、中心かららせん状になるように1,2,3,...と数字を埋めていく。 n=1001のとき、対角線上にある数字の合計値を求める。 考え方 実際に、らせん状に数字を配置して、対角線の数値を合計する。

project euler 27

問題 abs(a)素数となるような最大のa,bについてa*bを返す。 考え方 素数かどうかを判定できるようにしておき(篩とかで)、 実際にシミュレーションする。

project euler 26

問題 d 考え方 割り算の筆算のように計算すると、小数部分の数列が得られる。 2重ループで、2点s,eを選んでsからeとeからe+(e-s)までを確認して循環節になっている部分で最小のものを見つける。 e-s+1が最大のものを見つければよい。

project euler 23

問題 2つの過剰数で表せない正の整数の総和を求める。 考え方 約数関数を使って、28123までの過剰数をすべて列挙する。 2重ループ回して2つの過剰数の和であらわせる数をすべて調べる。 表せなかった数値をすべて足す。

project euler 18,67

問題 3 7 4 2 4 6 8 5 9 3 のような数字のピラミッドが与えられる。 このとき、一番上からスタートし、下に向かって左右のどちらかの数値を選びながら下っていく。 一番下まで来たとき、通ったルートの合計値を最大にするようなルートの値を求める。 上の例…

projet euler 17

問題 数字を英語に直したときの文字数を考える。(1ならoneなので3文字) 1から1000までその文字数を合計したものを答える。 考え方 http://www.ctb.ne.jp/~piyoshi/newpage144.html など参照してルールを実装する。andがつく場合や20、40などに注意する。