SOURCE

//判断一个数是不是质数
function isPrime(number){
    if(number===1){
        return false;
    }
    const len = Math.floor(Math.sqrt(number));
    let flag = true;
    for(let i=2;i <= len;i++){
        if(number%i===0){
        flag = false;
        break;
        }
    }
    return flag;
}

//得到某个数的质因子
function getPrime(number){
    let arr=[];
    let i=2;
    //判断number本身是不是质因子
    if(isPrime(number)){
        arr.push(number);
    }
    //否则获得number的质因子
    while(i<=Math.floor(number/2)){
        if(number%i===0 && isPrime(i)){
            arr.push(i);
        }
        i++;
    }
    return arr;
}

//求并集
function union(arr1,arr2){
    let unionList=[];
    for (let i = 0; i < arr1.length; i++) {
        unionList.push(arr1[i]);
    }
    for (let i = 0; i < arr2.length; i++) {
        if(unionList.indexOf(arr2[i])<0){
            unionList.push(arr2[i])
        }
    }
    return unionList;
}

//静态求解
function statistics(n){
    //arr为获得数列表
    let arr=[];
    //primeList质数存储列表
    let primeList = [];
    let all=0;
    //将输入的三个结果放入列表
    for(let i=0; i<n;i++){
        let number = parseInt(prompt());
        arr.push(number);
        primeList.push(getPrime(number))
        all += primeList[i].length;
    }
    //向列表中放入其他相乘后的结果
    for(let i=0;i < n-1;i++){
        let b = arr[i];
        let buffer = primeList[i];
        let flag = true;
        for (let j = i+1; j < n; j++) {
            if(b*arr[j] ===arr[i]*arr[j] && flag ){
                all += union(primeList[i],primeList[j]).length;
                flag=false;
            }else{
                all += union(primeList[i],primeList[j]).length;
                all += union(buffer,primeList[j]).length;
            }
            b*=arr[j];
            if(isPrime(arr[j])){
                buffer.push(arr[j]);
            }else{
                buffer = union(buffer,primeList[j]);
            }
        }
    }
    return all;
}

//console.log(statistics(3));
console 命令行工具 X clear

                    
>
console