我试图编写一个程序,返回最大的回文数,这是两个简单的五位数的乘积,并返回因子本身。
素数是一个自然数,它只被1除以它自己(2,3,5,7,11,…)
回文数字的两种读取方式相同(例如,ABBA)。

if(isPalin(mul) && isPrime(i) && isPrime(j))

function isPrime(i){
  for (var k = 2; k <= i; k++) {
      if (i%k===0 && i!==k) {
          return false;
    }
  }
return true;
}



<!--code-->


<script>

function largestPalindrome(){

    for(var i = 99999; i>10000; i--){
        for(var j = 99999; j>10000; j--){
            var mul = j*i;
            if(isPalin(mul) && isPrime(i) && isPrime(j)){
                return i * j;


            }
        }

    }
}


function isPalin(i){
    return i.toString() == i.toString().split("").reverse().join("");
    }

function isPrime(i){
  for (var k = 2; k <= i; k++) {
      if (i%k===0 && i!==k) {
          return false;
    }
  }
return true;
}

console.log(largestPalindrome());

</script>

当我运行这个程序时,它不会在控制台中显示任何内容,我也不知道为什么。

最佳答案

看看这个算法的时间复杂性。也可以看到时间复杂度对程序效率的影响。
这一部分不是很精确,但可以帮助你。你的第一个循环运行99999-10000时间。这也适用于第二个循环。在最坏的情况下isPrime运行(99999)所以if (i%k===0 && i!==k) return false;运行total_ops = (99999-10000)^2*(99999)次(我们跳过代码的其他部分)。如果你的程序是用比Java脚本快的C++编写的,那么它每秒可以运行大约2*(10^8)个简单的操作。您的程序运行时间大约(显然超过)total_ops/(2*10^8)(我建议计算它以进行估计…)。
附言:你可以把你的打印功能,以确保他们的进展…

09-17 08:33