Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- function foo($m, $b, $x)
- {
- $k = strlen($m);
- $y = array_reverse($x);
- $m_ = mod($m, $b);
- for ($i = 0; $i <= $k - 1; $i++) {
- $u = ($y[$i] * $m_) % $b;
- $y = array_reverse($y);
- $y = implode($y);
- $y += ($u * $m) * pow($b, $i);
- $y = str_split($y);
- $y = array_reverse($y);
- }
- $y = array_reverse($y);
- $y = implode($y);
- $y = floor($y / pow($b, $k));
- if ($y >= $m) {
- $y -= $m;
- }
- return $y;
- }
- function mod($m, $b)
- {
- if (gmp_gcd($m, $b) == 1) {
- $t = 1; //индикатор для выхода из while
- $m_ = -1; // т.к. когда мы переворачиваем число -17 например, в числителе всегда будет -1
- if ($m > $b) { //Сокращаем знаменатель если можно по модулю
- $m = $m % $b;
- }
- while ($t == 1) {
- $m_ += $b; //Прибавляем к числителю модуль
- if ($m_ / $m == floor($m_ / $m)) { //Смотрим делится ли нацело
- $t = 2; //Если да то выходим из цикла
- }
- }
- $y = $m_ / $m;
- return $y;
- } else {
- echo "NOD $m and $b not 1";
- }
- }
- //echo foo(17,10,[1,2,3,4]);
- echo foo(11,10,[2,0,3]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement