---
# System prepended metadata

title: '2020年度 情報基礎B 第13回, 第14回<br>アカデミック・スキルII リストと乱数'

---

##### tags: `ICL_B-2020` `lecture`
# 2020年度 情報基礎B 第13回, 第14回<br>アカデミック・スキルII リストと乱数
[ポータルへ戻る](https://hackmd.io/@nagae/ICL_B_2020)
<div style="text-align: center">

このページへは以下のQRコードまたはURLからアクセスできます：
![](https://i.imgur.com/dFG2ny9.png)
<code style="font-size:20pt">https://hackmd.io/@nagae/ICL_B_2020-Ch13</code>


</div>

# 今回のやることリスト
1. ノートブック「Colabプログラム入門(3)」を実行しながら閲覧する
2. 課題7 「ランダムに生成された整数列を素数と合成数とに分類する」


# 1. ノートブック「Colabプログラム入門(3)」を実行しながら閲覧する
1. Classroom＞授業＞参考資料＞Colabプログラム入門(3)にアクセス
2. Colaboratory で開いて順に実行してみる．

# 2. 課題7 「ランダムに生成された整数列を素数と合成数とに分類する」
## 課題の内容
:::info
2つの整数`N`と`M`が与えられた時，以下の処理を行うプログラムをコード・セルに記述しなさい：
- `M`個の「2以上`N`未満のランダムな整数」からなるリスト`nums`を生成する
- `nums`を素数のリスト`prime_nums`と合成数のリスト`composite_nums`に分類する
- `primes_nums`と`composite_nums`のそれぞれについて，その**要素数**と**最初の20個までの要素**を表示させる．

その上で，以下の3つのケースについて実行時間を計測し，その結果(出力と実行時間)および考察をテキスト・セルに記載しなさい：
1. `N=10000`, `M=50` (`N`が1万, `M`が50)
1. `N=10000`, `M=5000` (`N`が1万，`M`が5千)
2. `N=1000000`, `M=10000`(`N`が百万，`M`が1万)

なお，プログラムを工夫すれば，`N, M`ともに1千万(`N=M=10000000`)の規模でも **15〜16秒程度**，`N,M`ともに1億(`N=M=100000000`)の規模でも **3分程度** で処理できる．挑戦してみよう．
:::

:::danger
ランダムに生成された`nums`の順番を保持したまま`prime_nums`と`composite_nums`に分類すること．たとえば，
```python
nums = [19, 4, 7, 9, 8, 13, 9, 5, 2, 9, 31]
```
が与えられたなら，以下の実行結果が得られるようにすること．
```python
prime_nums = [19, 7, 13, 5, 2, 31]
composite_nums = [4, 9, 8, 9, 9]
```
:::

## 提出方法・提出期限
課題7に添付した Colab ノートブックをマイドライブにコピーし，ファイル名を
学籍番号_氏名-課題7.ipynb
とした上で，内容を編集・保存し，**「提出」ボタン**を押す．

<div style="font-weight:bold; color:red">締め切り：8月7日(金)23:59 (第14回講義の夜です!!お間違いなく!!)</div>

## 評価基準
### 必須項目(守られていない場合は減点)
- ファイル名，氏名，日付が適切に修正されているか．
- 適切に動作するプログラムができているか．
- 課題に提示された3つのケース(`(N,M)=(10000,50)`, `(N, M)=(10000,5000)`および`(N,M)=(1000000,10000)`)について，正しく動作するか．
- プログラムを記載したコード・セルがあるか．
- 実行結果や実行時間を整理し，考察を記述したテキスト・セルがあるか．
- 式や処理について十分なコメントが記載されているか．コメントは，プログラム・セル内にPythonのコメント(`#`以降に記載)として記述しても，テキストセルに記載してもよい．
### 加点要素(1): 技術の習得
- 素数判定などに関数を利用している
- 講義で使っていない機能(`numpy`モジュールなど)の利用
    - 十分なコメントが記載されている場合に限る
### 加点要素(2)： 創意工夫
- 指定されていない`(N, M)`についての実行結果を掲載している(ただし，多くても10個程度まで)．
- 効率化のための工夫をしている(講義中に紹介したものでも可)．
- `N`や`M`が大きい場合(例えば`N=M=10000000`や `N=M=100000000`)に対しても**高速**に計算するための工夫をしている．
- 自らの工夫によって実行時間がどれだけ減少したかを**定量的に評価**し，その根拠を考察している(考察はテキストセルに記述すること)．
- 特に，その考察について，不確実性を考慮した分析(例えば，複数回の実行時間の平均・分散を調べるなど)がある場合は，高く評価する．
