Формула для подсчета количества простых чисел в определенном диапазоне в Google Sheets - PullRequest
1 голос
/ 24 марта 2019

Я новичок в формулах Google Sheets, поэтому ничего не знаю в этой области.Мне нужно знать формулу, которая возвращает количество простых чисел.Я очень уверен, что алгоритмы тестирования простоты не очень просты (я никогда не делал их раньше).

Ответы [ 3 ]

1 голос
/ 24 марта 2019

добавьте этот скрипт:

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)
1 голос
/ 24 марта 2019

решение на основе сценариев для:

  • определения простых чисел: =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 голос
/ 24 марта 2019

эта формула будет работать до ~ 11-значного простого числа (проверено: 10000000019)

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

0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...