2020年06月03日

素数で四苦八苦して・・・うむむのむーーー

c/c++で素数を求めるプログラムを書いた。単純に2で割って割り切れたら素数でない、3で割って割り切れたら素数でない・・・・・・ 10000で割って割り切れたら素数でない・・・・

うむ。単純だ。計算するだけだ。高速化の工夫はない。

それでも問題は出る。1000が素数かどうか・・というぐらいであれば計算は瞬時だ。だが、10億となればどうか。10兆となればどうか。

10兆となると先ずintでは表現できない。なのでunsigned intにでもするか。それでもあかん。じゃー、long long long long intじゃーーー。

そういうわけでコンピューターで扱える整数って最大はどこじゃーー・・・・????
  32bit, 64bit, もっと増やして128bitに・・・

そう、この128bitぐらいが手軽に試せるものではないか。普通のg++とかはそこまで対応しとらん。
というわけで、Boostというものを知った次第である。128bitで整数だって・・・・すると、それは、億とか兆とか京とか垓とか・・・・どういう表現になるんだろね。知るかよ!!

つまり、コンピュータとOSとアプリで扱える数値って範囲はどこまでしゃーー。とは言っても時間を気にしないであれば桁数はいくらでも増やせるだろに・・・・

だが、時間を気にしよう。昔、インテルのCPU 8086という16bitのがあった。母板、つまり、マザーボード上には CPUソケットみたいなのがもう一個あって、8087という数値演算プロセッサーが載る・・・カネがあれば、それを買って載せる・・・・すると演算がちょ~早くなるのであった。。。

その数値演算コプロは今はCPUに取り込まれている。そして、昔から・・・だと思うがハードウェアとしては80bit構造である・・・・らしい。なので、floatもdoubleも演算速度は同じだ。

しかし、Boostは128bit演算が狩野舞子で狩野英孝で叶姉妹で化膿してくさいで、可能であるらしいのである。
というわけで、記事だけ読んだ。自分で試す気にはならない。

こういうの数学オタクが頑張り球へ。視覚化というのも面白いぞ。
横に2000画素、縦に数千画素の四角形を作って左上から1,2,3…と番号をつける。その番号が素数であれば白、素数でなければ黒のドットにする。
すると、その二次元の平面にどのようなデザインが現れるか?  

  さーどうだ。夏休みの宿題として学生はやってみたまへ・・・・ってか、自分でやれよな(笑)

posted by toinohni at 12:01| 東京 ☁| Comment(0) | ソフト系雑学 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください