##### 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`)に対しても**高速**に計算するための工夫をしている. - 自らの工夫によって実行時間がどれだけ減少したかを**定量的に評価**し,その根拠を考察している(考察はテキストセルに記述すること). - 特に,その考察について,不確実性を考慮した分析(例えば,複数回の実行時間の平均・分散を調べるなど)がある場合は,高く評価する.