2020-09-27 用課題

進捗

課題

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,4
theta = np.linspace(0, np.pi, 101)
phi = np.linspace(0, 2 * np.pi, 151)
theta, phi = np.meshgrid(theta, phi)

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

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} x &= r \sin \theta \cos \phi, \ y &= r \sin \theta \sin \phi, \ z &= r \cos \phi. \end{align}

競プロ、AtCoder

6. 素因数分解を活用した考察6-2. ひねった状況でも「約数の個数」がわかる

問題

$N!$ の正の約数の個数を $1000000007$ で割ったあまりを求めよ。

$1 \le N \le 1000$

(数値例)

・$N = 3$

答え: 4

$3! = 6$ の約数は、$1, 2, 3, 6$ の $4$ 個です。

ポイント

コードの参考

 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def is_factor_table(N):
    """[0, N] の整数が N の因数かどうかを調べる"""
    table = [True for _ in range(N+1)]
    table[0] = False
    table[1] = False
    for i in range(2, N+1):
        # いったん因数ではない判定をされたらチェック不要
        if table[i] == False:
            continue
        # i を因数に持たないなら i*j も因数に持たない
        for j in range(2, N // i):
            table[i * j] = False
    return table

def factors(N):
    table = is_factor_table(N)

    p = [] # 素因数をためるリスト
    for i in range(N+1):
        if table[i]:
            p.append(i)

    n = len(p) # 素因数の数
    cnt = [0 for _ in range(n)]
    for i in range(2, N+1):
        x = i
        j = 0
        while x > 1:
            while x % p[j]==0:
                cnt[j] += 1 # j 番目の素数で割れるうちは素因数のべきを足していく
                x //= p[j] # ループチェック用の x をどんどん小さくしていく
            j += 1

    return (n, cnt)

def solve(N):
    n, cnt = factors(N)
    ans = 1
    MOD = 1000000007
    for i in range(n):
        ans *= cnt[i] + 1 # 約数の個数計算
        ans %= MOD
    return ans

print(solve(3)) # 4
print(solve(6)) # 30
print(solve(1000)) # 972926972
1
2
3
4
30
972926972

Project Euler も見てみよう

IT 基礎知識

復習

OSI基本参照モデル

いろいろなプロトコル

本の記述を追いかける

ポート・ポート番号

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

それぞれプログラムの種類によって、使うポート(扉)が違う。例えば、メールを送るにはこの扉、メールを受け取るにはこの扉、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 パケット交換方式

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

メリット

耐障害性 - 通信路を固定しないため,迂回経路が取れる。 - パケット交換機にデータが蓄積されているため,復旧まで待てる。 - パケット多重 - 1 対 1 の通信で回線を占有する必要がないため,1つの回線を多くのノードで共有でき,回線を効率的につかえる - 異機種間接続性 - パケット交換機で中継するときにプロトコル変換・速度変換でエンドノードどうしが同じプロトコルをサポートしていなくても通信できる

デメリット

P.408 ATM 交換方式

P.408 ペイロード(payload)

P.410 輻輳

P.370 7 ネットワーク

P.370 7.1.1 OSI基本参照モデル

P.370 プロトコルとサービス

特定ベンダー(メーカー)の独自技術に大きく依存した製品、サービス、システム等を採用した際に、他ベンダーの提供する同種の製品、サービス、システム等への乗り換えが困難になる現象のこと。

出来上がった情報システムの正確な仕様が、システムを開発・構築したベンダーにしか解らなくなる場合がある。結果、システムの保守・拡張・改修等の際、現存システムを開発・構築したベンダーに引き続き発注せざるを得なくなる。

7.1.2 TCP/IPプロトコルスイート

P.372 TCP/IPの通信

P.372 MAC(Media Access Control)アドレス

P372 ポート番号

P.373 ネットワーク間の通信

P.374 7.2 ネットワーク接続装置と関連技術

P.374 7.2.1 物理層の接続

P.374 リピータ

P.374 7.2.2 データリンク層の接続

P374 ブリッジ