How to check if a string contains only 0 and 1 and is divisible by 7 in PHP

1 Answer

0 votes
// Check if a string contains only '0' and '1'
function isBinary(string $s): bool {
    return preg_match('/^[01]+$/', $s) === 1;
}

/*
In decimal: reading "123" means
remainder = remainder * 10 + digit

In binary: reading "1011" means
remainder = remainder * 2 + bit
*/

/*
0   (0*2 + 0) % 7   0
0   (0*2 + 0) % 7   0
0   (0*2 + 0) % 7   0
1   (0*2 + 1) % 7   1
1   (1*2 + 1) % 7   3
1   (3*2 + 1) % 7   0
0   (0*2 + 0) % 7   0
0   (0*2 + 0) % 7   0
*/

// Compute binary string modulo 7 without overflow
function divisibleBy7(string $s): bool {
    $remainder = 0;

    for ($i = 0; $i < strlen($s); $i++) {
        $c = $s[$i];
        $remainder = ($remainder * 2 + (ord($c) - ord('0'))) % 7;
    }

    return $remainder === 0;
}

$s = "00011100"; // 28

if (!isBinary($s)) {
    echo "Not a binary string\n";
    exit;
}

if (divisibleBy7($s)) {
    echo "Divisible by 7\n";
} else {
    echo "Not divisible by 7\n";
}



/*
run:

Divisible by 7

*/

 



answered Mar 1 by avibootz
edited Mar 1 by avibootz

Related questions

...