2020-09-13 用課題

進捗メモ

プログラミング勉強会

統計学・機械学習勉強会

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

課題

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,2
phi = np.linspace(0, np.pi, 31)
theta = np.linspace(0, 2 * np.pi, 46)
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()

TODO TeX の記録

競プロ、AtCoder

素因数分解の利用約数の総和

問題文 高橋君は完全なものが大好きです。 自然数には、完全数というものがあります。 完全数というのは、自分以外の約数の総和が自分と等しくなる自然数のことです。 例えば $6$ の場合 $1+2+3=6$ となるので完全数です。 それに対して、自分以外の約数の総和が自分より小さくなる場合は不足数と言い、大きくなる場合は過剰数と言います。 高橋君には今気になっている自然数があります。高橋君のために、それが完全数なのか不足数なのか過剰数なのか判定してください。

約数の総和のポイント

\begin{align} \left( \sum_{k=0}^{e_1} p_1^{k} \right) \cdot \left( \sum_{k=0}^{e_2} p_2^{k} \right) \cdots \left( \sum_{k=0}^{e_K} p_K^{k} \right) = \prod_{l=1}^K \left( \sum_{k=0}^{e_K} p_l^{k} \right). \end{align}

コードの参考

 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
27
#n = int(input())
def solve(n):
    sqrt_n = int(n ** 0.5)
    ans = 0

    for i in range(1, sqrt_n + 1):
        if n % i == 0:
            # 完全数は定義によって自分以外の約数の和を見るので、平方数の場合は約数だけを取る
            if i**2 == n:
                ans += i
                # ans = ans + i
            else:
                # ループで sqrt_n までしか見ないので、sqrt_n 以上の値になるペアも足し込む
                # 例:n = 8 で、sqrt_n + 1 = 3, i = 2 に対して n // i = 4
                ans += i + n // i

    if ans > n*2:
        print("Abundant")
    elif ans < n*2:
        print("Deficient")
    else:
        print("Perfect")

solve(6) # Perfect
solve(24) # Abundant
solve(27) # Deficient
solve(945) # Abundant
1
2
3
4
Perfect
Abundant
Deficient
Abundant

Project Euler も見てみよう

IT 基礎知識

復習

OSI基本参照モデル

いろいろなプロトコル

本の記述を追いかける

P.393 ホップ・リミット

P.394 アドレス変換技術

インターネットに接続するノードには,IPアドレスが割り当てられている必要があります。しかし,各組織に1つのIPアドレスがあれば,IPアドレスを割り当てられていないノードからもインターネットに接続できるといった技術があります。

P.395 ICMP を利用した ping

疎通とは

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 同期制御