daily pastebin goal
64%
SHARE
TWEET

Untitled

a guest Feb 13th, 2018 58 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. function foo($m, $b, $x)
  4. {
  5.     $k = strlen($m);
  6.     $y = array_reverse($x);
  7.  
  8.     $m_ = mod($m, $b);
  9.  
  10.     for ($i = 0; $i <= $k - 1; $i++) {
  11.         $u = ($y[$i] * $m_) % $b;
  12.         $y = array_reverse($y);
  13.         $y = implode($y);
  14.         $y += ($u * $m) * pow($b, $i);
  15.         $y = str_split($y);
  16.         $y = array_reverse($y);
  17.     }
  18.     $y = array_reverse($y);
  19.     $y = implode($y);
  20.     $y = floor($y / pow($b, $k));
  21.     if ($y >= $m) {
  22.         $y -= $m;
  23.     }
  24.     return $y;
  25. }
  26.  
  27. function mod($m, $b)
  28. {
  29.     if (gmp_gcd($m, $b) == 1) {
  30.        
  31.         $t = 1; //индикатор для выхода из while
  32.         $m_ = -1; // т.к. когда мы переворачиваем число -17 например, в числителе всегда будет -1
  33.         if ($m > $b) { //Сокращаем знаменатель если можно по модулю
  34.             $m = $m % $b;
  35.         }
  36.  
  37.         while ($t == 1) {
  38.             $m_ += $b; //Прибавляем к числителю модуль
  39.             if ($m_ / $m == floor($m_ / $m)) { //Смотрим делится ли нацело
  40.                 $t = 2; //Если да то выходим из цикла
  41.             }
  42.         }
  43.         $y = $m_ / $m;
  44.         return $y;
  45.     } else {
  46.         echo "NOD $m and $b not 1";
  47.     }
  48. }
  49.  
  50.  
  51. //echo foo(17,10,[1,2,3,4]);
  52. echo foo(11,10,[2,0,3]);
RAW Paste Data
Top