📌  相关文章
📜  Javascript程序检查是否所有数组元素都可以通过旋转数字转换为普罗尼克数(1)

📅  最后修改于: 2023-12-03 15:01:49.191000             🧑  作者: Mango

Javascript程序检查是否所有数组元素都可以通过旋转数字转换为普罗尼克数

在数学中,普罗尼克数是指一个素数,其旋转的数也都是素数。因此,这个题目可以转化为判断一个数是否为普罗尼克数。

解题思路

对于一个数,我们可以将其每一位数都旋转一遍,得到所有可能的数,再判断这些数是否为素数。如果都是素数,则原数是普罗尼克数。为了减少重复计算,我们可以把每个普罗尼克数的旋转结果缓存起来,以后再进行判断时直接从缓存中取出。

代码实现

下面是一个完整的Javascript程序,用于判断一个数组中的所有数是否都可以通过旋转数字转换为普罗尼克数。

// 判断一个数是否为素数
function isPrime(num) {
  if (num < 2) {
    return false;
  }
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

// 生成一个数字的所有旋转结果
function generateRotations(num) {
  const rotations = [];
  const digits = num.toString();
  for (let i = 0; i < digits.length; i++) {
    rotations.push(parseInt(digits.slice(i) + digits.slice(0, i)));
  }
  return rotations;
}

// 判断一个数是否为普罗尼克数
function isCircularPrime(num, cache) {
  if (cache.has(num)) {
    return true;
  }
  const rotations = generateRotations(num);
  for (let i = 0; i < rotations.length; i++) {
    if (!isPrime(rotations[i])) {
      return false;
    }
  }
  for (let i = 0; i < rotations.length; i++) {
    cache.add(rotations[i]);
  }
  return true;
}

// 判断一个数组中的所有数是否都可以通过旋转数字转换为普罗尼克数
function allCircularPrimes(arr) {
  const cache = new Set();
  for (let i = 0; i < arr.length; i++) {
    if (!isCircularPrime(arr[i], cache)) {
      return false;
    }
  }
  return true;
}
使用示例
console.log(allCircularPrimes([2, 3, 5, 7])); // 输出 true
console.log(allCircularPrimes([2, 3, 4, 5])); // 输出 false