SASで素数判定

SASの勉強を始めて3ヶ月弱経った。まだまだ使い慣れてはいないが、日々色々なコードを書いている。


そもそもSASとは、SAS Institute社が開発した統計解析・データ分析のために使われるソフトウェアです。そのソフトウェアで使われる言語を直接指すこともあります。
よくSAS言語の比較対象としてR言語などが挙げられますが、SASを使い始めて3ヶ月の私は、「SASはエラーメッセージが分かりやすくて良いな〜〜」って思ってます(小並感)。

SASの詳細は↓
ja.wikipedia.org


本題に入ります。SAS素数判定やってみたっていう話です。
最近、いつものように死んだ顔でYouTubeを意味もなくスクロールしていたら、3Blue1BrownJapanさんの「素数の螺旋」という動画を見つけました。
youtu.be


数学はあまり得意ではない自称理系の私にとって非常に興味深い内容で、釘付けになって拝見しました。「素数ってすげぇ〜〜」ってなりました(小並感)。
そこで、最近学び始めたSASを使って素数判定できたら面白そうという考えが何故か浮かんだので、心の赴くままに素数判定のコードを書いてみました。コード自体はとてもシンプルです。

data sosu(keep=i);
  do i = 1 to 10000;
    do j = 2 to i;
      if (j ^= i) and (mod(i, j) = 0) then leave;
      if j = i then output;
    end;
  end;
run;

このプログラムでは、1から10000までの数の中で素数のものだけを変数iとしてアウトプットしています。
まず、変数iを1から10000までの範囲でループさせます。
次に、変数jを2から i までの範囲でループさせています。変数jは割る数を表しています。
ここで、素数とは1とその数自身以外に約数をもたない数であるので、他の自然数で割り切れちゃったら素数ではないということになります。
コードの4行目は、「その数以外の自然数で割り切れたら内側のループを抜ける」ということを意味しています。
もし4行目でループを抜けなかったら、それはつまり「1とその数以外の自然数で割り切れなかった」ということなので、その数を素数として出力します。
これがこのコードの流れです。


【あとがき】
今回は2枚目の記事というということで、SASを使った素数判定という題材で書きました。
現在進行形で勉強している言語ということもあり、アウトプットも兼ねてブログ形式で発信したいなと思っていたので、まずはその第一歩を踏み出せたので良かったです。
ブログもSASもまだまだ初心者なので、色々拙いところがあるかと思いますが、今後もネタを発見したら書いていこうと思います。