LoginSignup
1
1

More than 3 years have passed since last update.

phpで「素数日」を求めたら・・・

Posted at

よっしゃパクるぜ!!
https://qiita.com/yukid/items/3bb121e151903666a37e

「php 素数」ターンッ
Google「GMP関数使え」

<?php
    $start = microtime(true);
    $min = DateTime::createFromFormat('Ymd', '20190101');
    $max = DateTime::createFromFormat('Ymd', '30181231');
    $today = new DateInterval('P1D');

    $primesFound[1] = 0;//たぶん素数
    $primesFound[2] = 0;//確実に素数

    do {
        $x = $min->format('Ymd');
        $primeStatus = gmp_prob_prime($x);
        if ($primeStatus === 1 || $primeStatus === 2) {
            echo $min->format('Y年m月d日') . PHP_EOL;
            $primesFound[$primeStatus]++;
        }
        $min->add($today);
    } while ($min <= $max) ;
    echo "たぶん素数の数:{$primesFound[1]}.確実に素数の数:{$primesFound[2]}.". PHP_EOL;
    $stop = microtime(true);
    echo $stop - $start . PHP_EOL;
//約1000年を1.3秒

gmp_prob_prime関数

返り値
この関数が 0 を返す場合、a は確実に素数ではありません。 1 を返す場合、a は「おそらく」 素数です。2 を返す場合、a は確実に素数です。

おそらく?

この関数は、Miller-Rabin の確率的テストを使用して、 その数が素数かどうかを調べます。

ん?

ミラー–ラビン素数判定法#決定的アルゴリズム

なるほどわからん。

と言うか先駆者が居た
https://qiita.com/rana_kualu/items/04cb330a0949f48cb7ab
https://qiita.com/rana_kualu/items/8b4e09f0410605f8180c

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1