LoginSignup
3
3

More than 5 years have passed since last update.

数学力で解くプログラミングパズル5選

Posted at

数学とアルゴリズムの力で解くプログラミングの問題です。

  • 全てプログラミングで解くことを想定した問題です。
  • 正答を出力するコードを書いて下さい。
  • 適切なアルゴリズムでコードを書けば、標準的なコンピュータで数秒以内の実行時間で正解が出せます。
  • 作成者は ideone にて python で 1 秒未満で正解できることを確認しています。

コメント欄やブログでのネタバレ等はご自由に…。

A. 超階乗

自然数 n の階乗(n!)は、1 から n までの自然数の積と定義されます。
 n! = 1×2×3×・・・×n

自然数 n の「超階乗」を「1 から n までの自然数の階乗の積」と定義します。
これを n$と書き表します。
 n$ = (1!)×(2!)×(3!)×・・・×(n!)

例えば、4$ = 288 です。
 4$ = (1!)×(2!)×(3!)×(4!) = 1×2×6×24 = 288

さて、4$が、3 で何回割り切れるかを考えてみましょう。
 288 ÷ 3 = 96
 96 ÷ 3 = 32
ですから、4$は 3 で最大 2 回割り切れます。
同様に、10$は、3 で最大 17 回割り切れることが確かめられます。

109$(10 億の超階乗)は、3 で最大何回割り切れるでしょうか?

B. 禁止数字

次の条件を満たす正の整数を⼩さい順に並べて数列を作ります。
 「どの桁にも 0, 1, 2, 3 が表れない。」

つまり、下のような数列です。
 4, 5, 6, 7, 8, 9, 44, 45, 46, 47, 48, 49, 54, 55, ...

この数列の 30 番⽬の項は 79 であることが確かめられます。

この数列の 109 番⽬の項を求めて下さい。

C. 多段べき乗

0 以上の整数 n に対し、数列 F(n) を次の漸化式で定義します。
 F(0) = 1
 F(n+1) = 3F(n)

つまり、下のような数列です。
 1, 3, 27, 7625597484987, ...

F(109) の下 6 桁を求めて下さい。

D. 白黒連

⽩と⿊のマークを⼀列に並べます。
このとき、もっとも⻑い⿊の連続した個数を考えましょう。
例えば次の並べ⽅では、もっとも⻑い⿊の連続した個数は 4 個です。
 ◆◆◆◆◇◆

次の並べ⽅では、もっとも⻑い⿊の連続した個数は 3 個です。
 ◇◇◆◆◆◇◆◇◇◆◆◆◇◆◆

6 個を並べるとき、もっとも⻑い⿊の連続した個数が 4 個となるような並べ⽅は、全部で 5 通り
あります。
 (1) ◆◆◆◆◇◆
 (2) ◆◆◆◆◇◇
 (3) ◆◇◆◆◆◆
 (4) ◇◆◆◆◆◇
 (5) ◇◇◆◆◆◆

自然数 n, m に対し、n 個のマークを並べるとき、もっとも⻑い⿊の連続した個数が m 個となるような並べ⽅の数を F(n, m) と定義します。
例えば、F(6, 4) = 5、F(12, 3) = 1167 であることが確かめられます。

F(105, 104) の下 6 桁を求めて下さい。

E. 最小公倍数

最⼩公倍数とは、2 つの整数の共通の倍数のうち最⼩のものです。
例えば、6 と 8 の最⼩公倍数は 24 です。

最⼩公倍数が 24 になるような数の組 (a,b) を考えましょう。
a≦b のとき、そのような組は全部で 11 組あることが分かります。
 (1,24) (2,24) (3,8) (3,24) (4,24) (6,8)
 (6,24) (8,12) (8,24) (12,24) (24,24)

自然数 n に対し、a≦b のとき、最⼩公倍数が n!(n の階乗)となるような組 (a, b) の個数を F(n) と定義します。
例えば、F(4) = 11、F(6) = 68 であることが確かめられます。

F(105) の下 6 桁を求めて下さい。

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3