예제 #1
0
 public function sqrt($a)
 {
     $p = $this->p;
     if (gmp_legendre($a, $p) != 1) {
         //no result
         return null;
     }
     if (gmp_strval(gmp_mod($p, gmp_init(4, 10)), 10) == 3) {
         $sqrt1 = gmp_powm($a, gmp_div_q(gmp_add($p, gmp_init(1, 10)), gmp_init(4, 10)), $p);
         // there are always 2 results for a square root
         // In an infinite number field you have -2^2 = 2^2 = 4
         // In a finite number field you have a^2 = (p-a)^2
         $sqrt2 = gmp_mod(gmp_sub($p, $sqrt1), $p);
         return array($sqrt1, $sqrt2);
     } else {
         throw new \Exception('P % 4 != 3 , this isn\'t supported yet.');
     }
 }
예제 #2
0
파일: mostInOne.php 프로젝트: badlamer/hhvm
// 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
$prime1 = gmp_nextprime(10);
// next prime number greater than 10
$prime2 = gmp_nextprime(-1000);
예제 #3
0
<?php

for ($i = -1; $i < 10; $i++) {
    var_dump(gmp_strval(gmp_legendre($i * $i - 1, 3)));
}
var_dump(gmp_strval(gmp_legendre(7, 23)));
var_dump(gmp_strval(gmp_legendre("733535124", "1234123423434535623")));
var_dump(gmp_strval(gmp_legendre(3, "1234123423434535623")));
$n = "123123";
$n1 = "1231231";
var_dump(gmp_strval(gmp_legendre($n, $n1)));
var_dump(gmp_strval(gmp_legendre($n, 3)));
var_dump(gmp_strval(gmp_legendre(3, $n1)));
var_dump(gmp_legendre(3, array()));
var_dump(gmp_legendre(array(), 3));
var_dump(gmp_legendre(array(), array()));
var_dump(gmp_legendre(array(), array(), 1));
var_dump(gmp_legendre(array()));
var_dump(gmp_legendre());
echo "Done\n";