用于计算Google表格中特定范围内素数的公式

时间:2019-03-23 23:45:46

标签: google-sheets google-sheets-formula

我是Google表格公式的初学者,所以我对此领域一无所知。我需要知道一个返回素数的公式。我很确定素数测试算法不是很简单(我以前从未做过)。

3 个答案:

答案 0 :(得分:1)

此公式最多可使用11位素数(经过测试:10000000019)

=IF(A1=2,TRUE,IF(AND(MOD(A1,ROW(INDIRECT("2:"&ROUNDUP(SQRT(A1),0))))<>0),TRUE,FALSE))

0

答案 1 :(得分:1)

添加此脚本:

function ISPRIME(n) {
  if(typeof n !== "number") return false;
  if(Math.floor(n) !== n) return false;
  if(n <= 1) return false;
  if(n <= 3) return true;
  if(n % 2 === 0 || n % 3 === 0) return false;
  for(var i = 5; i*i <= n; i += 6) {
    if(n % i === 0  || n % (i + 2) === 0) return false;
  }
  return true;
}

创建Sheet2并像这样填充它:

0

使用公式: =ISPRIME('SHEETNAMEHERE'!A1) ,然后向下拖动然后向右拖动。完成后隐藏整个工作表,并使用简单的公式计算所有素数:

=COUNTIF(Sheet2!A1:T25, TRUE)

答案 2 :(得分:1)

以下脚本解决方案:

  • 检测素数:=ISPRIME(A1)
  • 计算范围内的素数:=COUNTPRIME()
  • 计算范围为=COUNTCOMPOSITE()
  • 的组合数字

贷记OP

function ISPRIME(n) {
  if(typeof n !== "number") return false;
  if(Math.floor(n) !== n) return false;
  if(n <= 1) return false;
  if(n <= 3) return true;
  if(n % 2 === 0 || n % 3 === 0) return false;
  for(var i = 5; i*i <= n; i += 6) {
    if(n % i === 0  || n % (i + 2) === 0) return false;
  }
  return true;
}
function COUNTPRIME() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("A1:T25");
  var values = range.getValues();
  var count = 0
  values.forEach(function (array){
    array.forEach(function (value){
      if (ISPRIME(value)) count++;
    })
  })
  return count;
}
function COUNTCOMPOSITE() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange("A1:T25");
  var values = range.getValues();
  var count = 0
  values.forEach(function (array){
    array.forEach(function (value){
      if (!ISPRIME(value)) count++;
    })
  })
  return count;
}

注意:在脚本中更改A1:T25以反映您的范围