我是Google表格公式的初学者,所以我对此领域一无所知。我需要知道一个返回素数的公式。我很确定素数测试算法不是很简单(我以前从未做过)。
答案 0 :(得分:1)
此公式最多可使用11位素数(经过测试:10000000019)
=IF(A1=2,TRUE,IF(AND(MOD(A1,ROW(INDIRECT("2:"&ROUNDUP(SQRT(A1),0))))<>0),TRUE,FALSE))
答案 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并像这样填充它:
使用公式: =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
以反映您的范围