PHPで素数日を列挙

(1/1)
ここでは、年月日(YYYYMMDD)を整数とみなし、それが素数になる日のことを「素数日」と呼ぶことにする。今回は、PHP を使って指定した西暦年の素数日を列挙するプログラムを作ってみる。

サンプル・プログラムの実行例

PHPで素数日を列挙

サンプル・プログラム

圧縮ファイルの内容
PrimeDay.phpサンプル・プログラム本体。
pahooCalendar.php暦計算クラス pahooCalendar。
暦計算クラスの使い方は「PHPで日出没・月出没・月齢・潮を計算」を参照。include_path が通ったディレクトリに配置すること。

サンプル・プログラムの解説

0254: //pahooCalendarクラス
0255: $pcl = new pahooCalendar();
0256: $pcl->setLanguage('jp');
0257: 
0258: //素数日一覧を求める
0259: if ($errmsg == '') {
0260:     $msg = "<table>\n";
0261:     $day = 13;
0262:     $cnt = 1;
0263:     $msg .= sprintf("<tr><td class=\"index\" colspan=\"3\">%04d年</td></tr>\n", $year);
0264:     for ($month = 1; $month <= 12; $month++) {
0265:         $dm = $pcl->getDaysInMonth($year$month);
0266:         for ($day = 1; $day <= $dm$day++) {
0267:             $yyyymmdd = sprintf('%04d%02d%02d', $year$month$day);
0268:             if (MillerRabinPrimalityTest($yyyymmdd)) {
0269:                 $youbi = $pcl->getWeekString($year$month$day);
0270:                 $msg .= sprintf("<tr><td>%02d</td><td>%02d月%02d日(%s)</td><td>%d</td></tr>\n", $cnt$month$day$youbi$yyyymmdd);
0271:                 $cnt++;
0272:             }
0273:         }
0274:     }
0275:     $msg .= "</table>\n";
0276: else {
0277:     $msg = '';
0278: }

月の日数や曜日の計算は、ユーザークラス "pahooCalendar" に分離している。

ここでは、 sprintf  関数を使って年月日を連結した整数 $yyyymmdd を生成し、「PHP と Python で巨大素数を扱う」で作成したミラー・ラビン素数判定関数 MillerRabinPrimalityTest を使って、その日が素数であるかどうかを判定している。

活用例

みんなの知識 ちょっと便利帳では、「『素数日(素数の日)』を調べる」のコーナーで、このサンプル・プログラムを活用している。ありがとうございます。

参考サイト

(この項おわり)
header