--- lang: ja tags: ICL_B_2022, lecture --- # 2022年度 情報とデータの基礎 第11回 <br>サイエンス・スキルI 計算機による問題解決の基礎(5): Python初級プログラミング(リストと乱数) [ポータルへ戻る](https://hackmd.io/@nagae/ICL_B_2022) <div style="text-align: center"> このページへは以下のQRコードまたはURLからアクセスできます: ![](https://i.imgur.com/6n9l2RN.png =200x) <code style="font-size:20pt">https://hackmd.io/@nagae/ICL_B_2022-Ch11</code> </div> # 今回のやることリスト 1. ノートブック「Colabプログラム入門(3)」を実行しながら閲覧する 2. 課題5 「ランダムに生成された整数列を素数と合成数とに分類する」 # 1. ノートブック「Colabプログラム入門(3)」を実行しながら閲覧する 1. Classroom>授業>参考資料>Colabプログラム入門(3)にアクセス 2. Colaboratory で開いて順に実行してみる. # 2. 課題5 「ランダムに生成された整数列を素数と合成数とに分類する」 ## 課題の内容 :::info 2つの整数`N`と`M`が与えられた時,以下の処理を行うプログラムをコード・セルに記述しなさい: - `M`個の「2以上`N`未満のランダムな整数」からなるリスト`nums`を生成する - `nums`を素数のリスト`prime_nums`と合成数のリスト`composite_nums`に分類する - `primes_nums`と`composite_nums`のそれぞれについて,その**要素数**と**最初の20個までの要素**を表示させる. その上で,以下の3つのケースについて実行時間を計測し,その結果(出力と実行時間)および考察をテキスト・セルに記載しなさい: 1. `N=10,000`, `M=50` (`N`が1万, `M`が50) 1. `N=10,000`, `M=5,000` (`N`が1万,`M`が5千) 2. `N=1,000,000`, `M=10,000`(`N`が百万,`M`が1万) なお,プログラムを工夫すれば,`N, M`ともに1千万(`N=M=10,000,000`)の規模でも **15〜16秒程度**,`N,M`ともに1億(`N=M=100,000,000`)の規模でも **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] ``` ::: ## 提出方法・提出期限 課題5に添付した Colab ノートブックをマイドライブにコピーし,ファイル名を 学籍番号_氏名-課題5.ipynb とした上で,内容を編集・保存し,**「提出」ボタン**を押す. <div style="font-weight:bold; color:red">締め切り:7月13日(水)23:59</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=10,000,000`や `N=M=100,000,000`)に対しても**高速**に計算するための工夫をしている. - 自らの工夫によって実行時間がどれだけ減少したかを**定量的に評価**し,その根拠を考察している(考察はテキストセルに記述すること). - 特に,その考察について,不確実性を考慮した分析(例えば,複数回の実行時間の平均・分散を調べるなど)がある場合は,高く評価する.