Rust Common Prime Divisors
fn gcd(n: i64, m: i64) -> i64 {
if n % m == 0 { m } else { gcd(m, n % m) }
}
fn remove_common_prime_divisors(mut n: i64, m: i64) -> i64 {
while n != 1 {
let d = gcd(n, m);
if d == 1 {
break;
}
n /= d;
}
n
}
fn common_prime_divisors(a: &[i64], b: &[i64]) -> i64 {
let mut counter = 0;
for i in 0..a.len() {
let x = a[i];
let y = b[i];
let d = gcd(x, y);
let x = remove_common_prime_divisors(x, d);
if x != 1 {
continue;
}
let y = remove_common_prime_divisors(y, d);
if y == 1 {
counter += 1;
}
}
counter
}
This checks whether two numbers are built from the same prime factors by repeatedly dividing out their shared parts.