<script>
function
findPrimeFactors(n)
{
let primeFactors =
new
Array(9).fill(0);
let j = 0;
if
(n % 2 == 0) {
primeFactors[j++] = 2;
while
(n % 2 == 0)
n >>= 1;
}
for
(let i = 3;
i * i <= n; i += 2) {
if
(n % i == 0) {
primeFactors[j++] = i;
while
(n % i == 0)
n /= i;
}
}
if
(n > 2)
primeFactors[j++] = n;
let PrimeFactors =
new
Array(j);
for
(let i = 0; i < j; i++)
{
PrimeFactors[i] = primeFactors[i];
}
return
PrimeFactors;
}
function
findShortestSubsequence(dp, a, index, primeFactors)
{
let n = a.length;
for
(let j = index; j < n; j++) {
let bitmask = 0;
for
(let p = 0;
p < primeFactors.length; p++) {
if
((a[j] % primeFactors[p]) == 0) {
bitmask ^= (1 << p);
}
}
for
(let i = 0; i < dp.length; i++) {
if
(dp[i] == n + 1)
continue
;
dp[bitmask & i]
= Math.min(dp[bitmask & i], dp[i] + 1);
}
}
}
function
prletMinimumLength(a)
{
let Min = a.length + 1;
for
(let i = 0; i < a.length - 1; i++) {
let primeFactors = findPrimeFactors(a[i]);
let n = primeFactors.length;
let dp =
new
Array(1 << n);
for
(let i = 0; i < dp.length; i++){
dp[i] = a.length + 1
}
let setBits = (1 << n) - 1;
dp[setBits] = 1;
findShortestSubsequence(dp, a, i + 1,
primeFactors);
Min = Math.min(dp[0], Min);
}
if
(Min == (a.length + 1))
document.write(-1 +
"<br>"
);
else
document.write(Min +
"<br>"
);
}
let arr = [ 2, 6, 12, 3 ];
prletMinimumLength(arr);
</script>