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

问题描述 投票:1回答:3

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

google-sheets google-sheets-formula
3个回答
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以反映您的范围


1
投票

这个公式将达到~11位数的素数(测试:10000000019)

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

0


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)
© www.soinside.com 2019 - 2024. All rights reserved.