第6講 配列の学習
第4話 1次元配列利用による素数探索のために
素数とは何でしたか。
例を挙げると2,3,5,7,11,13,17,19,23,29,・・・
ですね。
素数とは、1と自分自身でしか割りきれない数をいいます。
不規則に見える素数の並びに究極の規則性があるのではないかというのが、
リーマン予想です。
リーマン予想が肯定的に解かれてしまうと、
IT社会の基盤になっている暗号が簡単に解かれ、
IT社会崩壊の危険性さえあります。
知らないうちに銀行の貯金口座が0になっていたということもあり得るわけです。
リーマン予想の行方によって、
金融資本主義が根底から崩されてしまう可能性さえあります。
リーマンブラザーズの倒産によるリーマンショックは、100年に1回の経済危機を招きましたが、
リーマン予想が肯定的に解かれた場合には、
人類史上最大の危機が訪れる可能性があります。
経済や政治は大混乱し、第3次世界大戦を誘発することさえ考えられるほど大きな問題です。
リーマンショックを遙かに上回るリーマンショックが訪れるかもしれないのです。
また、不思議なことにリーマン予想によって、素数の規則性を裏付けるゼータ関数零点の並びの式が、
なんと原子核のエネルギーの間隔を表す式と恐ろしい一致を示したのです。
論証のみで真偽がわかる整数論の問題が、
実験のみで真偽がわかる原子物理学となぜか結びついてしまうのです。
ピュタゴラスは、宇宙の真理は数であると主張していましたが、
これは真実である可能性が濃厚になりました。
宇宙の究極の秘密は、素数が握っている!
宇宙は素数によって支配されている!
というわけで、素数の研究とは大変魅力があるということがお分かりでしょう。
(もちろんそれとともに大きな危険性もはらんでいるわけですが。)
今回は、C言語を使って素数を探し出すプログラムを作ろうと思います。
では素数であることはどのように調べればよいでしょうか。
例えば、1117は素数でしょうか。
これの判定以下のすべての素数で割っていき、割り切れる素数が見つかれば素数でなく、
いずれの素数でも割りきれなければ素数です。
=10.816653826392ですから、結局7以下の素数2,3,5,7で割っていけばよいのです。
1117÷2=558・・・1
1117÷3=372・・・1
1117÷5=223・・・2
1117÷7=159・・・4
でいずれでも割り切れませんから、素数と判定できます。
したがって、aが素数であるか判定するには以下のすべての素数で割っていけばよいのです。
int a[1000000];
などと宣言し
a[0]=2; (2は素数です。)
としておいてから
for文を3から始めて、それぞれの平方根以下の蓄えられた素数で割っていって、
余りがいずれも出なければ、素数として1次元配列に蓄えていくことによって、
素数を次々に探索していくことができます。
探索速度が速すぎてコンソール画面が流星のように流れてしまいますので、
for文の上限は10000程度にしておきましょう。
for文を強制的に止めるには
if(a[j]>sqrt((double)i))break;
などとします。breakがfor文を強制的に終了させる命令です。
を求めるにはsqrt((double)a)とします。
(double)はint型のaを強制的にdouble型に変更するものです。
というのはsqrt(*)に入る*はdoubleがただなければならないからです。
また、sqrt(*)を使うには、
#include <math.h>
によって、math.hインクルードファイルをインクルードしておく必要があります。
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)