创建一个函数,查找有多少个素数,最多为给定整数
Create a function that finds how many prime numbers there are, up to the given integer
//Create a function that finds how many prime numbers there are, up to the given integer.
var numoffactor = 0
var count=0
function primenumber(str) {
for (var i = 0; i < str; i++)
for (var g = 0; g < i; g++) {
if (i % g == 0) //if a factor is found
{ numoffactor++ }
}
if (numoffactor == 0) { count++ }
return count
}
console.log(primenumber(9)) //showing 0 no matter what number I put in
console.log(numoffactor)//showing 12
我这里的逻辑是:从0开始到str,求每个整数的因子个数,每i次循环,如果因子个数为0,则为质数。但无论输入如何,输出都是 9。因素的数量似乎也已关闭。
这应该适合你。函数 primenumber
运行主 for 循环并记录找到了多少个素数,而 isPrimeNumber
函数检查当前数字是否为素数以及 returns 真或假。
function primenumber(str){
let counter = 0;
if(str <= 1)
return 0;
for(let i=2; i < str; i++) {
if( isPrimeNumber(i) )
counter++;
}
return counter;
}
function isPrimeNumber(num) {
if( num == 2 )
return true;
for(let g=2; g < num; g++) {
if (num % g == 0) {
return false;
}
}
return true;
}
document.write (primenumber(9));
你漏掉了一些要点-
- 你不能将数字除以 0。这是未定义的。
- 所有数字都可以被1整除,所以你不检查。
- 您没有将每个数字的
numoffactor
重置为 0
。
- 第一个 for 循环括号丢失。
numoffactor == 0
检查必须
在 for 循环中。
var numoffactor = 0
var count = 0
function primenumber(str) {
if(str <= 1)
return 0;
for (var i = 1; i < str; i++) {
numoffactor = 0;
for (var g = 2; g < i; g++) {
if (i % g == 0){
numoffactor++;
}
}
if (numoffactor == 0) {
count++;
}
}
return count;
}
console.log(primenumber(9))
console.log(numoffactor)
这是另一种解决方案,您不需要计算因子的数量。
var count = 1
function primenumber(str) {
if(str <= 1)
return 0;
for (var i = 0; i < str; i++) {
var g = 2;
for (; g < i; g++) {
if (i % g == 0)
break;
}
if (i == g) {
count++;
}
}
return count;
}
console.log(primenumber(9))
主页这有帮助。
可以生成一个范围内所有素数的列表,都是抓长度。
编辑: 已更新以跳过奇数值,如 georg 建议的那样。
const pushIf = (arr, value, fn) => { if (fn(value)) { arr.push(value) } }
const isPrime = (n) => {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false
}
}
return n > 1
}
const primes = (min, max) => {
min = min || 2
if (max === undefined) { max = min; min = 2 }
let primeList = [], n = min
if (n % 2 === 0) { // if min is even
pushIf(primeList, n, isPrime)
n++ // goto next odd
}
while (n < max) {
pushIf(primeList, n, isPrime)
n += 2 // skip odds
}
return primeList
}
console.log(primes(5, 10).length) // 2 (5 and 7)
console.log(primes(1000).length) // 168
.as-console-wrapper { top: 0; max-height: 100% !important; }
试试这个代码
function primeFactorsTo(max)
{
var store = [], i, j, primes = [];
for (i = 2; i <= max; ++i)
{
if (!store [i])
{
primes.push(i);
for (j = i << 1; j <= max; j += i)
{
store[j] = true;
}
}
}
return primes.length;
}
console.log(primeFactorsTo(9))
//Create a function that finds how many prime numbers there are, up to the given integer.
var numoffactor = 0
var count=0
function primenumber(str) {
for (var i = 0; i < str; i++)
for (var g = 0; g < i; g++) {
if (i % g == 0) //if a factor is found
{ numoffactor++ }
}
if (numoffactor == 0) { count++ }
return count
}
console.log(primenumber(9)) //showing 0 no matter what number I put in
console.log(numoffactor)//showing 12
我这里的逻辑是:从0开始到str,求每个整数的因子个数,每i次循环,如果因子个数为0,则为质数。但无论输入如何,输出都是 9。因素的数量似乎也已关闭。
这应该适合你。函数 primenumber
运行主 for 循环并记录找到了多少个素数,而 isPrimeNumber
函数检查当前数字是否为素数以及 returns 真或假。
function primenumber(str){
let counter = 0;
if(str <= 1)
return 0;
for(let i=2; i < str; i++) {
if( isPrimeNumber(i) )
counter++;
}
return counter;
}
function isPrimeNumber(num) {
if( num == 2 )
return true;
for(let g=2; g < num; g++) {
if (num % g == 0) {
return false;
}
}
return true;
}
document.write (primenumber(9));
你漏掉了一些要点-
- 你不能将数字除以 0。这是未定义的。
- 所有数字都可以被1整除,所以你不检查。
- 您没有将每个数字的
numoffactor
重置为0
。 - 第一个 for 循环括号丢失。
numoffactor == 0
检查必须 在 for 循环中。
var numoffactor = 0
var count = 0
function primenumber(str) {
if(str <= 1)
return 0;
for (var i = 1; i < str; i++) {
numoffactor = 0;
for (var g = 2; g < i; g++) {
if (i % g == 0){
numoffactor++;
}
}
if (numoffactor == 0) {
count++;
}
}
return count;
}
console.log(primenumber(9))
console.log(numoffactor)
这是另一种解决方案,您不需要计算因子的数量。
var count = 1
function primenumber(str) {
if(str <= 1)
return 0;
for (var i = 0; i < str; i++) {
var g = 2;
for (; g < i; g++) {
if (i % g == 0)
break;
}
if (i == g) {
count++;
}
}
return count;
}
console.log(primenumber(9))
主页这有帮助。
可以生成一个范围内所有素数的列表,都是抓长度。
编辑: 已更新以跳过奇数值,如 georg 建议的那样。
const pushIf = (arr, value, fn) => { if (fn(value)) { arr.push(value) } }
const isPrime = (n) => {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false
}
}
return n > 1
}
const primes = (min, max) => {
min = min || 2
if (max === undefined) { max = min; min = 2 }
let primeList = [], n = min
if (n % 2 === 0) { // if min is even
pushIf(primeList, n, isPrime)
n++ // goto next odd
}
while (n < max) {
pushIf(primeList, n, isPrime)
n += 2 // skip odds
}
return primeList
}
console.log(primes(5, 10).length) // 2 (5 and 7)
console.log(primes(1000).length) // 168
.as-console-wrapper { top: 0; max-height: 100% !important; }
试试这个代码
function primeFactorsTo(max)
{
var store = [], i, j, primes = [];
for (i = 2; i <= max; ++i)
{
if (!store [i])
{
primes.push(i);
for (j = i << 1; j <= max; j += i)
{
store[j] = true;
}
}
}
return primes.length;
}
console.log(primeFactorsTo(9))