From 270a8acec10848ecffcc7d2f4b1e458558bd8f52 Mon Sep 17 00:00:00 2001 From: danogentili Date: Mon, 8 Aug 2016 19:13:52 +0200 Subject: [PATCH] Updating PrimeModuleg --- src/danog/MadelineProto/PrimeModule.php | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/danog/MadelineProto/PrimeModule.php b/src/danog/MadelineProto/PrimeModule.php index b7c43ef4..482ff303 100644 --- a/src/danog/MadelineProto/PrimeModule.php +++ b/src/danog/MadelineProto/PrimeModule.php @@ -224,27 +224,24 @@ class PrimeModule $factors = []; - $one = new \phpseclib\Math\BigInteger(1); - $two = new \phpseclib\Math\BigInteger(2); - $limit = $n->root()->add($one); + $limit = sqrt($n) + 1; foreach ($this->smallprimes as $checker) { - $checker = new \phpseclib\Math\BigInteger($checker); - if ($limit->compare($checker) == -1) { + if ($checker > $limit) { break; } - while ($n->modPow($one, $checker)->toString() == '0') { + do { $factors[] = $checker; - $n = $n->divide($checker)[0]; - $limit = $n->root()->add($one); - if ($limit->compare($checker) == -1) { + $n = intval($n / $checker); + $limit = sqrt($n) + 1; + if ($checker > $limit) { break; } - } + } while (Tools::posmod($n, $checker) == 0); } - if ($n->compare($two) == -1) { + if ($n < 2) { return $factors; } - while ($n->compare($two) == 1) { + while ($n > 1) { if ($n->isprime()) { $factors[] = $n; break;