예제 #1
0
/* The Computer Language Shootout
   http://shootout.alioth.debian.org/
   contributed by Peter Baltruschat
*/
function primes($size)
{
    $flags = array_fill(0, ($size >> 5) + 1, ~0);
    $count = 0;
    for ($i = 2; $i < $size; ++$i) {
        $offset = $i >> 5;
        $mask = 1 << $i - ($offset << 5);
        if ($flags[$offset] & $mask) {
            ++$count;
            for ($j = $i << 1; $j <= $size; $j += $i) {
                $offset = $j >> 5;
                $mask = 1 << $j - ($offset << 5);
                if ($flags[$offset] & $mask) {
                    $flags[$offset] ^= $mask;
                }
            }
        }
    }
    unset($flags);
    printf("Primes up to %8d %8d\n", $size, $count);
}
$n = $argv[1] != '' ? $argv[1] : $_GET['n'];
$size = 10000 * (1 << $n);
primes($size);
primes($size >> 1);
primes($size >> 2);
예제 #2
0
파일: MathsTest.php 프로젝트: adhocore/dsa
 /**
  * @depends testPrimeLoader
  * @expectedException \InvalidArgumentException
  */
 public function testPrimesException()
 {
     primes('str');
 }
예제 #3
0
파일: primes.php 프로젝트: adhocore/dsa
/**
 * Returns $nth prime number.
 *
 * @author Jitendra Adhikari <*****@*****.**>
 *
 * @uses   self.primes()
 * @param  int  The position in prime number series
 *
 * @return int  The generated prime number
 *
 * @throws InvalidArgumentException  If input is not positive integer
 */
function prime($n)
{
    $primes = primes($n);
    return end($primes);
}
예제 #4
0
*/
define(BPC, 32);
define(FLAG_MAX, 0xffffffff);
function primes($n)
{
    $size = 10000 * pow(2, $n);
    $flags = array();
    $count = 0;
    for ($i = 0; $i < $size / BPC + 1; $i++) {
        $flags[$i] = FLAG_MAX;
    }
    for ($prime = 2; $prime < $size; $prime++) {
        $offset = $prime / BPC;
        $mask = pow(2, $prime % BPC);
        if (($flags[$offset] & $mask) != 0) {
            $count++;
            for ($i = $prime * 2; $i <= $size; $i += $prime) {
                $offset = $i / BPC;
                $mask = pow(2, $i % BPC);
                if (($flags[$offset] & $mask) != 0) {
                    $flags[$offset] ^= $mask;
                }
            }
        }
    }
    printf("Primes up to %8d %8d\n", $size, $count);
}
$n = $argv[1] != '' ? $argv[1] : 1;
for ($i = 0; $i < 3; $i++) {
    primes($n - $i);
}