【上級】データサイエンス 数学ストラテジスト 公式問題集 解答例まとめ Q.61〜70

「データサイエンス 数学ストラテジスト 上級」はデータサイエンスの基盤である、確率・統計、線形代数、微積分、機械学習、プログラミングなどを取り扱う資格試験です。当記事では「日本数学検定協会」作成の「公式問題集」の演習問題$61$〜$70$の解答例を取り扱いました。

・数学検定まとめ
https://www.hello-statisticians.com/math_certificate

演習問題

Q.61

製品ABCDEFG
重量(g)$150$$170$$180$$200$$200$$240$$250$
電源容量(mAh) $3000$ $4000$ $5000$ $7000$ $8000$ $8000$$9000$

「電源容量 $\div$ 重量」は下記のように計算できる。

製品ABCDEFG
電源容量 $\div$ 重量 $20$ $23.5$ $27.8$ $35$ $40$ $33.3$ $36$

上記が大きい順にD、E、F、Gを選ぶと合計は$32000$であり、$(4)$か$(5)$に絞られる。ここでFをB、Cに入れ替えたB、C、D、E、Gも$1$kg以下であり、この合計は$33000$である。よって、$(5)$が正しい。

Q.62

①〜⑥の処理手順は下記のプログラムに対応する。

a = 1

for i in range(1,5):
    a = 3*a+4

print(a)

・実行結果

241

上記より$(4)$が正しい。

・解説
for文でなくwhile文を用いるのが厳密には正しい一方で、while文は基本的にfor文で代用できるのでここではfor文を用いました。

Q.63

各基数について下記のような計算を行うことで用意するマークの数を計算することができる。

import numpy as np

n = np.array([2, 3, 4, 8, 16])

for i in n:
    num_mark = 0
    y, m, d = 0, 0, 0
    count = 0
    while y < 2099:
        count += 1
        y = i**count - 1
    num_mark += (i*(count-1) + 2099//i**(count-1) + 1)
    count = 0
    while m < 12:
        count += 1
        m = i**count - 1
    if i<12:
        num_mark += (i*(count-1) + 12//i**(count-1) + 1)
    else:
        num_mark += (i*(count-1) + 12//i**(count-1))
    count = 0
    while d < 31:
        count += 1
        d = i**count - 1
    num_mark += (i*(count-1) + 31//i**(count-1) + 1)
    print("n: {}, mark: {}".format(i, num_mark))

・実行結果

n: 2, mark: 42
n: 3, mark: 40
n: 4, mark: 41
n: 8, mark: 51
n: 16, mark: 71

実行結果より基数が$3$のときマークの数が最小になるので$(2)$が正しい。

・解説
基数が$16$の場合、月の$12$を上回りますが、このときだけ処理を変える必要があることに注意しておくと良いです。

Q.64

$n \to \infty$のとき$n \log{n} << n^{2}$なので$(2)$が正しい。

Q.65

$1$$0$$0$$1$$\mathbf{1}$$1$$0$$0$
$0$$1$$0$$0$$\mathbf{1}$$0$$1$$1$
$1$$1$$0$$0$$\mathbf{1}$$0$$0$$1$
$\mathbf{1}$$\mathbf{0}$$\mathbf{0}$$\mathbf{1}$$\mathbf{1}$$\mathbf{0}$$\mathbf{1}$$\mathbf{1}$
$1$$1$$0$$0$$\mathbf{1}$$0$$1$$0$
$0$$0$$1$$0$$\mathbf{0}$$0$$1$$0$
$0$$1$$0$$1$$\mathbf{1}$$0$$0$$1$
$0$$0$$1$$1$$\mathbf{1}$$1$$0$$0$

上記より$4$行目と$5$列目の和が奇数であることが確認できるので$(3)$が正しい。

Q.66

$n=16$の場合:$1,3,5,7,9,11,13,15,2,6,10,14,4,12,8,16$
$n=30$の場合:$1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,2,6,10,14,18,22,26,30,8,16,24,4,20,12,28$

上記より$(4)$の組み合わせが正しい。

Q.67

逆ポーランド記法の仕組みより$(3)$が正しい。

Q.68

$a$と$\sqrt{a^{2}-4b}$の差の$a-\sqrt{a^{2}-4b}$はそれぞれの値について下記のような計算で得られる。

import numpy as np

a = np.array([2., 1.00001, 1.1, -1., -1.00001])
b = np.array([1., 0.00001, -1.1, -2., -1.00001])

print(a-np.sqrt(a**2-4*b))

・実行結果

[  2.00000000e+00   2.00000000e-05  -1.26854386e+00  -4.00000000e+00
  -3.23609139e+00]

上記より$(2)$が正しい。

Q.69

下記のような計算によって結果を得ることができる。

import numpy as np

n_st = np.array([500., 300., 200., 100.])

for i in [100, 125, 150, 175, 200]:
    n_candi = np.ceil(n_st/i)
    print("i: {}, n_sum: {}, n_candi: {}".format(i, np.sum(n_candi), n_candi))

・実行結果

i: 100, n_sum: 11.0, n_candi: [ 5.  3.  2.  1.]
i: 125, n_sum: 10.0, n_candi: [ 4.  3.  2.  1.]
i: 150, n_sum: 9.0, n_candi: [ 4.  2.  2.  1.]
i: 175, n_sum: 8.0, n_candi: [ 3.  2.  2.  1.]
i: 200, n_sum: 7.0, n_candi: [ 3.  2.  1.  1.]

上記より$175$で割ったときの結果を考えればよく、$(4)$が正しいことが確認できる。

Q.70

$$
\large
\begin{align}
c_1 &= x_1 + x_2 + x_3 \, (\mathrm{mod} \, 2) \\
c_2 &= x_1 + x_2 + x_4 \, (\mathrm{mod} \, 2) \\
c_3 &= x_1 + x_3 + x_4 \, (\mathrm{mod} \, 2)
\end{align}
$$

$x_1=1, x_2=1, x_3=0, x_4=1$の場合、$c_1=0, c_2=1, c_3=0$が得られる。

ここで実際は$c_1=1, c_2=0, c_3=0$であるが、$x_2$を$0$に変えたときのみ$c_1=1, c_2=0, c_3=0$に一致する。よって、$(2)$の$1001100$が正しい。