function countMatchesWithFilter(startA, startB, iterations) {
const [factorA, factorB, divisor] = [16807, 48271, 2147483647];
let [valA, valB] = [startA, startB];
let count = 0;
for (let i = 0; i < 5000000; i++) {
do {
valA = (valA * factorA) % divisor;
} while (valA & 0b11);
do {
valB = (valB * factorB) % divisor;
} while (valB & 0b111);
if ((valA & 0xffff) == (valB & 0xffff)) {
count++;
}
}
return count;
}