TypeScript Common Prime Divisors
function commonPrimeDivisors(a: number[], b: number[]): number {
const gcd = (n: number, m: number): number => (n % m === 0 ? m : gcd(m, n % m));
const removeCommonPrimeDivisors = (n: number, m: number): number => {
while (n !== 1) {
const d = gcd(n, m);
if (d === 1) {
break;
}
n /= d;
}
return n;
};
let counter = 0;
for (let i = 0; i < a.length; i++) {
let x = a[i];
let y = b[i];
const d = gcd(x, y);
x = removeCommonPrimeDivisors(x, d);
if (x !== 1) {
continue;
}
y = removeCommonPrimeDivisors(y, d);
if (y === 1) {
counter++;
}
}
return counter;
}
This checks whether two numbers are built from the same prime factors by repeatedly dividing out their shared parts.