<?php // требует BCMath для арифметики длинных integer

    // Китайская теорема об остатках
    //
    // находит такое число res, что
    // res = r (mod a)
    // для всего массива (r, a)
    //
    // res = SUM r*m*mrev,
    // где m = произведение всех a кроме очередного,
    // mrev - обратный к m в Z/aZ
    
    // вход в виде
    // (остаток, основание)
    // основания должны быть попарно взаимно просты
    // и остаток меньше основания
    $data = [
        [37,  1487],
        [55,  1511],
        [280, 1523],
        [361, 1543],
        [415, 1549],
        [523, 1553],
        [641, 1559]
    ];
    
    
    // сначала находим произведение Pa всех a
    $Pa = 1; 
    foreach ($data as list( ,$a)) $Pa = bcmul($Pa, $a);
    
    // заводим массив M слагаемых вида (r, m, mrev)
    // где очередное m равно Pa/a
    // то есть произведению всех a, кроме очередного
    foreach ($data as list($r, $a)){
        $m = bcdiv($Pa, $a);
        $M[] = array($r, $m, getMr($m, $a));
    } 

    // считаем res - сумму слагаемых из M
    $res = 0;
    foreach ($M as list($r, $m, $mrev))
        $res = bcadd($res, bcmulClosure($r, $m, $mrev));   
    echo $res;
    
    
    // мультипликативно обратный к a в Z/bZ
    function getMr($a, $b){
        for ($i = 1; $i < $b; $i++)
    	    if(bcmod(bcmul($a, $i), $b) == 1) return $i;
    }

    // обобщение bcmul на несколько аргументов
    function bcmulClosure(...$params){
        $res = 1;
        foreach($params as $v)$res = bcmul($res, $v);
        return $res;
    }

?>