2020-09-20 用課題

進捗メモ

プログラミング勉強会

統計学・機械学習勉強会

理系のための語学・リベラルアーツ

課題

TODO

自分用メモ

Matplotlib

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import sph_harm

m,l = 0,3
phi = np.linspace(0, np.pi, 101)
theta = np.linspace(0, 2 * np.pi, 151)
phi, theta = np.meshgrid(phi, theta)

r = sph_harm(m, l, theta, phi).real
x = np.abs(r) * np.sin(phi) * np.cos(theta)
y = np.abs(r) * np.sin(phi) * np.sin(theta)
z = np.abs(r) * np.cos(phi)

fig = plt.figure(figsize=(8, 8))
ax = fig.gca(projection="3d")
ax.plot_surface(x, y, z, color="aqua", edgecolor="k")
plt.axis("off")
plt.show()

TeX の記録

\begin{align} i \hbar \frac{\partial}{\partial t} \left| \psi \right\rangle = \hat{H} \left| \psi \right\rangle \end{align}

競プロ、AtCoder

素因数分解の利用オイラー関数

正の整数 $N$ が与えられたとき $1,2,\dots,N$ のうち $N$ と互いに素であるものの個数を $\phi(N)$ と表します。これをオイラー関数とよびます。

問題

正の整数 $N$ が与えられる。$1,2,\dots,N$ のうち、$N$ と互いに素であるものの個数を求めよ。

(数値例)

・$N=12$

答え: 4

$1,2,3,4,5,6,7,8,9,10,11,12$ のうち、$12$ と互いに素であるものは、$1,5,7,11$ の $4$ 個です。

オイラー関数のポイント

\begin{align} \phi(N) = N (1 − 1/p_1)(1 − 1 / p_2) \cdots (1 − 1 / p_K) = N \prod_{i=1}^K \left(1 - \frac{1}{p_i} \right). \end{align}

コードメモ

1
2
3
4
5
6
7
#http://www.tohoho-web.com/python/operators.html
#切り捨て割り算 //
print(15 // 2) # 7
print(15 / 2)  # 7.5
print("-----")
print(7 // 3) # 2
print(7 / 3)  # 2.3333333333333335
1
2
3
4
5
7
7.5
-----
2
2.3333333333333335

コードの参考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def solve(n):
    # p はオイラー関数の結果をためていく変数
    p = n
    sqrt_n = n ** 0.5
    d = 2

    # いつも通り √n まで計算
    while d <= sqrt_n:
        # 割り切れるときに処理
        if n%d == 0:
            # (d-1) // d は (1 - 1/d) のこと
            p = p * (d - 1) // d
            # 互いに素な数だけ引っ張りたいので、因数に持っていたら割れるだけ割ってしまう
            while n % d == 0: n //= d
        # 一通り計算したら d を増やす
        d += 1
    # n が素数なら n > 1, True で 1 になる
    # n が合成数なら n = 1, False で 0 になる
    lst = [p, p * (n-1) // n]
    print(lst)
    return lst[n > 1]

print(solve(6)) # 2
print(solve(12)) # 4
print(solve(17)) # 16
print(solve(1000000)) # 400000
1
2
3
4
5
6
7
8
[3, 2]
2
[4, 0]
4
[17, 16]
16
[400000, 0]
400000

Project Euler も見てみよう

https://projecteuler.net/problem=9

A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,

a2 + b2 = c2 For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc.

1
2
3
4
5
6
7
8
N = 1001
for a in range(1, N):
    for b in range(a, N):
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            print(a,b,c)

200 * 375 * 425
1
2
3
4
5
6
7
200 375 425





31875000

IT 基礎知識

復習

OSI基本参照モデル

いろいろなプロトコル

本の記述を追いかける

P.395 COLUMN

P.396 7.5 トランスポート層のプロトコル

P.396 7.5.1 TCP と UDP

P.396 TCP

P.397 TCP でのコネクションの確立

ポート・ポート番号

ポートとは、ネットワークでデータを通信するための扉のようなものだと思うとわかりやすいだろう。ポート番号はその扉の番号だ。

それぞれプログラムの種類によって、使うポート(扉)が違う。例えば、メールを送るにはこの扉、メールを受け取るにはこの扉、Webページを見てもらうのはこの扉、などと決まっているわけだ。

実際TCPやUDPで通信を行うときは、コンピュータ一台という単位ではなく「プログラム単位」つまり「プロセスやスレッド単位」で通信が行われる。そのためプロセス同士、正しく受け渡しをする必要がある。

このとき通信しているプロセスには「ポート番号」というものが割り振られる。プロセスやスレッドはこのポート番号を目印にして、どのアプリケーションとどのアプリケーションが通信をとっているのかを判別することになる。

IPアドレスを建物の住所に例えるなら、ポート番号は「部屋の番号は何号室か?」という例えになる。コンピュータネットワークにおいて、プロトコル、IPアドレスとポート番号はまとめると、「どのような方法」で「どこ」の「何号室」に通信をとるのか?という形にいいかえることが出来る。

通信において重要なポート番号だがポートを開くということは、特定の部屋の扉をあけはなっている状態に等しいので、サービスを提供するサーバでもないかぎり、基本的に不必要なポートは開かないように設定しておかなければならない。

代表的なポート番号とプロトコル それぞれ「どの様なプロトコルがどの様なポート番号で運用されるのか?」代表的な例をあげると以下のようになる。

  • TCP 20 : FTP (データ)
  • TCP 21 : FTP (制御)
  • TCP 22 : SSH
  • TCP 23 : Telnet
  • TCP 25 : SMTP
  • UDP 53 : DNS
  • UDP 67 : DHCP(サーバ)
  • UDP 68 : DHCP(クライアント)
  • TCP 80 : HTTP
  • TCP 110 : POP3
  • UDP 123 : NTP
  • TCP 443 : HTTPS
  • WELL KNOWN PORT NUMBERS 0~1023
  • MySQL: 3306

P.397 アプリケーション間の通信

P.398 7.6 アプリケーション層のプロトコル

P.398 7.6.1 メール関連

P.398 メールプロトコル

補足:POP と IMAP

Gmail と IMAP

P.398 メール受信プロトコル、メール関連のプロトコル・規格

P.399 Web 関連

P.401 DNS(Domain Name System)

P.402 DNS クライアント(リゾルバ)の名前解決要求

コンテンツサーバへの問い合わせを繰り返すのは非効率なので,通常,自組織内にキャッシュサーバを置きます。この場合,リゾルバはキャッシュサーバに問い合わせを行い,キャッシュサーバ内に該当情報がキャッシュされていれば直接回答を得ることができます。ない場合は,キャッシュサーバが組織外のコンテンツサーバに問い合わせを行い,その結果をリゾルバに回答します。また,キャッシュサーバは,同様の問い合わせの際に再利用できるよう,問い合わせで得た結果を一定期間キャッシュします。

リゾルバからキャッシュサーバに送られる問い合わせを再帰的な問合せという。"再 帰 的"とは,「再び帰ってくる」という意味で,再帰的な問合せに対しては,最終的な結果を回答する必要がある。

P.402 インターネット上の電話サービスで用いるプロトコル

P.403 その他のアプリケーション層プロトコル

P.404 7.7 伝送技術

P.404 誤り制御

P.404 パリティチェック

P.404 CRC

P.404 ハミング符号

P.406 同期制御

P.408 7.8 交換方式

P.408 パケット交換方式

パケット通信のメリット・デメリット

メリット
デメリット

P.408 ATM 交換方式

P.408 ペイロード(payload)