计算Google张中一定范围内素数个数的公式

A formula to count the number of primes in an certain range in Google Sheets

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

此公式最多适用于 ~11 位素数(已测试:10000000019)

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

添加此脚本:

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 并像这样填充它:

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

=COUNTIF(Sheet2!A1:T25, TRUE)

脚本解决方案:

  • 检测素数:=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 以反映您的范围