Example #1
0
// gmp_init (although that's probably tested well by now)
var_dump($a = gmp_init(123456));
var_dump($b = gmp_init("0xFFFFDEBACDFEDF7200"));
// gmp_intval
echo gmp_intval(PHP_INT_MAX) . "\n";
echo gmp_intval(gmp_add(PHP_INT_MAX, 1)) . "\n";
echo gmp_intval(gmp_sub(PHP_INT_MAX, 1)) + 1 . "\n";
echo gmp_strval(gmp_add(PHP_INT_MAX, 1)) . "\n";
// gmp_invert
echo gmp_invert("5", "10");
// no inverse, outputs nothing, result is FALSE
$invert = gmp_invert("5", "11");
echo gmp_strval($invert) . "\n";
// gmp_jacobi
echo gmp_jacobi("1", "3") . "\n";
echo gmp_jacobi("2", "3") . "\n";
// gmp_legendre
echo gmp_legendre("1", "3") . "\n";
echo gmp_legendre("2", "3") . "\n";
// gmp_mod
$mod = gmp_mod("8", "3");
echo gmp_strval($mod) . "\n";
// gmp_mul
$mul = gmp_mul("12345678", "2000");
echo gmp_strval($mul) . "\n";
// gmp_neg
$neg1 = gmp_neg("1");
echo gmp_strval($neg1) . "\n";
$neg2 = gmp_neg("-1");
echo gmp_strval($neg2) . "\n";
// gmp_nextprime
Example #2
0
<?php

for ($i = -1; $i < 10; $i++) {
    var_dump(gmp_strval(gmp_jacobi($i * $i - 1, 3)));
}
var_dump(gmp_strval(gmp_jacobi(7, 23)));
var_dump(gmp_strval(gmp_jacobi("733535124", "1234123423434535623")));
var_dump(gmp_strval(gmp_jacobi(3, "1234123423434535623")));
$n = "123123";
$n1 = "1231231";
var_dump(gmp_strval(gmp_jacobi($n, $n1)));
var_dump(gmp_strval(gmp_jacobi($n, 3)));
var_dump(gmp_strval(gmp_jacobi(3, $n1)));
var_dump(gmp_jacobi(3, array()));
var_dump(gmp_jacobi(array(), 3));
var_dump(gmp_jacobi(array(), array()));
var_dump(gmp_jacobi(array(), array(), 1));
var_dump(gmp_jacobi(array()));
var_dump(gmp_jacobi());
echo "Done\n";
 public static function jacobi($a, $n)
 {
     if (extension_loaded('gmp') && USE_EXT == 'GMP') {
         return gmp_strval(gmp_jacobi($a, $n));
     } elseif (extension_loaded('bcmath') && USE_EXT == 'BCMATH') {
         if ($n >= 3 && $n % 2 == 1) {
             $a = bcmod($a, $n);
             if ($a == 0) {
                 return 0;
             }
             if ($a == 1) {
                 return 1;
             }
             $a1 = $a;
             $e = 0;
             while (bcmod($a1, 2) == 0) {
                 $a1 = bcdiv($a1, 2);
                 $e = bcadd($e, 1);
             }
             if (bcmod($e, 2) == 0 || bcmod($n, 8) == 1 || bcmod($n, 8) == 7) {
                 $s = 1;
             } else {
                 $s = -1;
             }
             if ($a1 == 1) {
                 return $s;
             }
             if (bcmod($n, 4) == 3 && bcmod($a1, 4) == 3) {
                 $s = -$s;
             }
             return bcmul($s, self::jacobi(bcmod($n, $a1), $a1));
         }
     } else {
         throw new ErrorException("Please install BCMATH or GMP");
     }
 }
Example #4
0
 /**
  * {@inheritDoc}
  * @see \Mdanter\Ecc\MathAdapterInterface::jacobi()
  */
 public function jacobi($a, $n)
 {
     return gmp_strval(gmp_jacobi(gmp_init($a, 10), gmp_init($n, 10)));
 }