砂場で遊ぼう

c++/python/mathematica などの練習帳

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

Project Euler 170 / 連結された積が0から9までのパンデジタル数になるパンデジタル数の最大値

問題概略 右から攻めるか左から攻めるか 実例を 1 つ探す 分割数などをしぼりこむ 高速化のための微調整 a は 3 の倍数 a は 50 未満 再計算 問題概略 6 を 1273 と 9854 にかけると次のようになる。\begin{align*} &6 \times 1273 = 7638\\ &6 \times 9854 …

Project Euler 175 / ある数を2のべき乗の和として表せる方法の数の比

問題概略 カルキン・ウィルフ・ツリー 手計算で解ける mathematica で解く 問題概略 整数 を 2 のべき乗の和で表すことを考える。ただし各数は高々 2 回しか使ってはいけないものとする。この表し方の数を とする。 と定義する。たとえば 10 には 5 通りの異…

Project Euler 176 / 隣辺を共有する直角三角形

問題概略 n の約数の個数の条件 n が奇数のとき n が偶数のとき n の素因数分解 問題概略 辺の長さが , , , の 4 つの直角三角形はすべて隣辺(直角に隣接する辺)として長さ 12 の辺をもっている。 長さ 12 の隣辺をもつ整数辺の直角三角形はこれら 4 つだ…

Project Euler 169 / ある数を2のべき乗の和で表せる方法の数の探査

問題概略 2 進法表示の桁数字に注目 実装 python で解く mathematica で解く 問題概略 整数 を 2 のべき乗の和で表すことを考える。ただし各数は高々 2 回しか使ってはいけないものとする。 この表し方の数を とする。 と定義する。例として を考える。 \beg…

Project Euler 304 / Primonacci

問題概略 どう解くか 素数は NextPrime で処理 フィボナッチ数は MatrixPowerMod で処理 実装 並列処理 前の項を使い回す 問題概略 より大きい最小の素数を であらわす。 これを用いて を次のように定義する。 また,次の式をみたすフィボナッチ数 を用いて …

Project Euler 199 / 反復円充填

問題概略 パターンを見抜く デカルトの円定理 計算に使う関係式 python と mathematicaで実装 python で解く mathematicaで解く 問題概略 半径が等しくて互いに外接する 3 つの円が大きい円に内接している。 この図形がもつ 4 つのすき間を円で埋める操作を…

Project Euler 209 / 循環論法

問題概略 何を求めればいい? mathematica で実験 実はリュカ数列 実装 mathematica python 問題概略 入力の 2 進真理値表は 個の入力ビット(2 進数で 0 は「偽」,1 は「真」)から 1 個の出力ビットへの写像である。 たとえば論理和(AND)と排他的論理和…

Project Euler 196 / 三つ子素数

問題概略 基本方針 実際の計算 実装 問題概略 正の整数すべてを使って下の図のような三角形を作る。各数は最大 8 個の数と隣接している。次の条件をみたす 3 つの素数の組を「三つ子素数」(prime triplet)と呼ぶ。「3 つの素数のうち 1 つが他の 2 つと隣…

Project Euler 200 / 連続する部分文字列に200を含む耐素数性スキューブ

問題概略 mathematicaで解く pythonで解く 問題概略 (, は異なる素数)で表せる数をスキューブ(sqube)と定義する。 , はスキューブである。 最初の 5 つのスキューブは 72, 108, 200, 392, 500 である。200 はどの位の数字を変更しても素数とならない最小…

Project Euler 186 / ネットワークの接続性

問題概略 mathematica で解く 首相を含む部分集合の大きさを計算 グラフの連結成分を求める python で解く 通話記録の中身はどうなってるか 問題概略 100 万人のユーザをもつ電話システムの通信記録がある。 RecNr Caller Called 1 200007 100053 2 600183 5…

Project Euler 329 / 素数カエル

問題概略 条件つき確率 メモ化再帰 python で解く 問題概略 素数カエルは 1 から 500 までの番号がついた 500 個の正方形の上を跳びまわる。 左右のいずれかの正方形に等確率で跳ぶことができ,正方形外に跳び出すことはない。 1 か 500 に着地した場合,次…

Project Euler 686 / 2の累乗数

問題概略 をとって評価 だけで評価 の候補をしぼりこむ 階差の候補は3つだけ コードに落とす 未証明の解法=嘘解法 問題概略 は 12 からはじまる最初の 2 の累乗数であり,2 つ目は である。 からはじまる 2 の累乗数のうち小さい方から 番目の数を とする。…

Project Euler 005 / 最小の倍数(Smallest multiple)

問題概略 for ループで最小公倍数を計算 reducdeで畳み込み 問題概略 1 から 20 までのすべての整数で割りきれる最小の自然数を求めよ。https://projecteuler.net/problem=5 for ループで最小公倍数を計算 答えは 1 から 20 までの数の最小公倍数です。LCM …

Project Euler 004 / 最大の回文積(Largest palindrome product)

問題概略 積を作って回文数判定 回文数を作って積に分解 問題概略 3 桁の数の 2 つの積で表される回文数(左右どちらから読んでも同じ値になる数)の最大値を求めよ。https://projecteuler.net/problem=4 積を作って回文数判定 3 桁の数 , の積を作って で回…

Project Euler 003 / 最大の素因数(Largest prime factor)

問題概略 factorintで素因数分解 問題概略 600851475143 の素因数の中で最大のものを求めよ。https://projecteuler.net/problem=3 factorintで素因数分解 sympy の factorint で素因数分解します。sympy.factorint(600851475143) の結果は「素数:指数」の辞…

Project Euler 002 / 偶数のフィボナッチ数(Even Fibonacci numbers)

問題概略 2 で割った余りの周期性を利用 漸化式を使う 問題概略 400 万以下で偶数値のフィボナッチ数の総和を求めよ。 https://projecteuler.net/problem=2 2 で割った余りの周期性を利用 番目のフィボナッチ数を であらわして,これを 2 で割った余りを考え…

Project Euler 001 / 3か5の倍数(Multiples of 3 or 5)

問題概略 for ループ 内包表記 関数を定義 問題概略 1000 未満の自然数で,3 か 5 の倍数であるものの和を求めよ。https://projecteuler.net/problem=1 for ループ 愚直に for ループをまわして条件をみたすものの和を計算します。 ans = 0 for i in range(1…