计算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
以反映您的范围
我是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
以反映您的范围