2013-03-01から1ヶ月間の記事一覧

project euler 112

問題 bouncy数とは、数字の各ケタについて、増加列でも減少列でもない数字をいう。 1からnまでの数で初めにbouncy数の割合が99%となるnを求める。 考え方 各桁ごとに分解した数字列を求め、それをソートする。 そして、もとの数字列と昇順ソートしたもの&降…

project euler 99

問題 a^bのaとbが複数与えられる。 与えられたa^bの中で一番大きいものを返す。 考え方 対数をとっても大小関係は変わらないので、b*log(a)を使って比較する。

project euler 81

問題 80*80の配列に数字が入っている。 各マスで右または下に移動できるとき、左上から右下までの経路で数字の和が最小となるものを見つけ、その和を返す。 考え方 ダイクストラ。

project euler 49

問題 4ケタの数が3つa,b,cあり、 ・それぞれが等差(b-a==c-b) ・すべて素数 ・a,b,cの各桁の数値は並び替えると、他の2つの数値を作り出せる ようなa,b,cを見つける。 1487,4817,8147以外にもう一つあるので、それを連結した12ケタの数字を答える。 考え方 …

project euler 43

問題 各桁の数字が0〜9までが1回ずつしか出ないような10ケタの数字を考える。 d[i]がi桁目を表すとすると、 d[2]d[3]d[4]が2で割り切れる、d[3]d[4]d[5]が5で割り切れる、、、と素数で割り切れれるようなものの総和を求める 考え方 各数字が1回ずつしか出な…

project euler 97

問題 28433*2^7830457+1 の末尾10桁を求める。 考え方 多倍長で繰り返し2乗法で計算。

TCO2013 Round1C

ox- 638位で敗退。500もオーバーフローだけで、アルゴリズム的には間違ってなかったのでよしとする。。 (凡ミス再提出はだめだったけど) 今回、500で線形探索してる人結構部屋にいたけど、作っておいたテストケースが貼り付けたとき最後になぞのスペースが入…

TCO2013 Round1C Div1 500

問題 プログラミングコンテストをやっている。 部屋がn+1部屋あって、0〜n-1までの番号の部屋にはそれぞれ何人か人がいる。 自分はn番の部屋に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ケタの順列を生成…