なでしこさんでランダムな素数を表示
今週も当然(?)頭は良くならなかった。
ノー対策であっという間に週末。
寝倒したり他のことをしたりして土日の時間も消滅。
今日も元気(?????)に適当なものを作ってごまかしとくか。
そろそろ大石泉ネタも続けすぎてる気がするし、一旦よすか……
今回やったこと
なでしこで、指定したビット数のランダムな素数を生成・表示する。
競技プログラミングでハッシュを使うときに役立つかも?
プログラム
ランダムな素数を表示 (なでしこ3貯蔵庫)
ポイント
素数判定
●(数が)素数とは
変数の除数は2。
除数×除数≦数の間、繰り返す
もし、数を除数で割った余りが0と等しいならば、いいえを戻す。
除数を1増やす。
ここまで。
はいを戻す。
ここまで。単純な試し割りにより、素数判定を行う。
2未満の整数、および整数でないものが入力される可能性は考慮していない。
UIの構築
DOM親要素の「行揃え」に「中央」をDOMスタイル設定。
サイズ選択肢は空配列。
ビット幅を2から30まで繰り返す
サイズ選択肢に「{ビット幅}ビット (~{SHIFT_L(1,ビット幅)-1})」を配列追加。
ここまで。
サイズ選択はサイズ選択肢のセレクトボックス作成。
それの「selectedIndex」に18をDOM属性設定。
「の素数」のラベル作成。
生成ボタンは「出して」のボタン作成。
2回、改行作成。
結果欄は空のラベル作成。
それの「文字サイズ」に「300%」をDOMスタイル設定。生成する素数のビット数の入力欄、生成ボタン、生成結果を表示するラベルを用意する。
ランダムな素数の生成
生成ボタンをクリックした時には
定数のビット数はサイズ選択の「selectedIndex」をDOM属性取得して2を足す。
定数の下限はSHIFT_L(1,ビット数-1)。
定数の上限はSHIFT_L(1,ビット数)-1。
変数の未発見ははい。
未発見の間繰り返す
定数の候補は[下限,上限]の乱数。
もし、候補が素数ならば
結果欄に候補をDOMテキスト設定。
未発見はいいえ。
ここまで。
ここまで。
ここまで。ビット数を具体的な数値の範囲に変換し、それを用いて乱数を生成する。
生成した乱数が素数であれば、それを表示して処理を終了する。
素数でなければ、乱数の生成をやり直す。
break 的なループを脱出する命令が見つからなかったため、「未発見」フラグを用いてループから抜ける設計にした。
とはいえ、今回の素数判定処理で用いたように、「戻す」で関数ごと抜けることはできるようである。
おわりに
今回は、最近の「適当なものを作ってごまかす」記事よりさらに手抜き感が強い。
作ったプログラムが短く、ポイント (解説) のセクション数も少ない。
そして、プログラム自体も手抜きである。
たとえば、今回は30ビットまでの対応とした。
これは、今回用いた左シフト演算が32ビット符号付き整数で答えを出す仕様なので、31ビットに対応しようとすると追加の処理が求められ、面倒になるからである。
また、素数判定も、単純な方法を用いており、対応するビット数を上げにくくなっている。
出さない良記事より出すクソ記事……と信じたいところだが、はたして本当にそうだろうか?
クソ記事を出し、さらにその告知もすると、そのクソ記事を読む人が生じ、クソ記事をわざわざ開くことによる時間と通信量の消費を発生させることになる可能性がある。
クソ記事でも記事を出すことがstreak維持のために必要?じゃあなんでstreak維持するの?別にstreak維持する必要なんて無いやろ?streak維持したいっていうのはお前の独りよがりであり、わがままだろ?そもそも必要なものなんて何も無いと思う。生きている必要も無い。国の維持も必要ない。地球も銀河系も宇宙も必要ない。
まあ、それでも自分は独りよがりでわがままなクズなので、生きていたいし、streak維持のための雑記事 (クソといえるかはわからん) も出すよ。クズなので。


コメント