Erlang Common Prime Divisors
-module(common_prime_divisors).
-export([common_prime_divisors/2]).
common_prime_divisors(A, B) ->
length([ok || {X, Y} <- lists:zip(A, B), has_same_prime_divisors(X, Y)]).
has_same_prime_divisors(X, Y) ->
D = gcd(X, Y),
case remove_common(X, D) of
1 -> remove_common(Y, D) =:= 1;
_ -> false
end.
remove_common(1, _) -> 1;
remove_common(N, M) ->
case gcd(N, M) of
1 -> N;
D -> remove_common(N div D, M)
end.
gcd(N, M) when N rem M =:= 0 -> M;
gcd(N, M) -> gcd(M, N rem M).
This checks whether two numbers are built from the same prime factors by repeatedly dividing out their shared parts.