// loop 1, 2 etc
var primeNums = [];
for (var i = 2; i < num; i++) {
// check if prime
console.log('i ', i);
var isNotPrime = false;
for (var z = 2; z < i; z++) {
// 7 / 2 is not factor or 7 == 7 prime
if (i % z == 0 && i != z) {
isNotPrime = true;
}
console.log('z', z, i);
}
if (isNotPrime == false) {
primeNums.push(i)
}
}
console.log(primeNums.reduce((add, current) => {
return add += current;
}));
return primeNums.reduce((add, current) => {
return add += current;
});
}
sumPrimes(977);这段代码有primeNums,检查每个计数的数字,对于每个数字,它检查每个计数,检查它是否不是素数,如果它是素数,它会推送结果。
function sumPrimes(num) {
// Helper function to check primality
function isPrime(num) {
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0)
return false;
}
return true;
}
// Check all numbers for primality
let sum = 0;
for (let i = 2; i <= num; i++) {
if (isPrime(i))
sum += i;
}
return sum;
}这段代码检查一个被除数的数字是否没有给出一个浮动数字,并将其作为一个函数对每一个数计算到num,同时将素数加起来。
为什么我的程序中有一个无限循环?
我的是第一个代码块。
发布于 2021-07-12 16:54:10
代码中的问题是第二个for循环if条件。一旦条件测试为真,就永远不会中断循环。它是循环到给定数字的整个范围。
if (i % z == 0 && i != z) {
isNotPrime = true; // Need break statement after this.
}正如其他人指出的那样,计算结果花费的时间太长了。
我们可以对程序进行优化
。
这是我使用您的代码的解决方案:
var primeNums = [];
function sumPrimes(num) {
for (var i = 3; i < num; i+=2) {
// check if prime
console.log('i ', i);
var isNotPrime = false;
for (var z = 2; z < i/2; z++) {
// 7 / 2 is not factor or 7 == 7 prime
if (i % z == 0 && i != z) {
isNotPrime = true;
break;
}
console.log('z', z, i);
}
if (isNotPrime == false) {
primeNums.push(i)
}
}
console.log(primeNums.reduce((add, current) => {
return add += current;
})+2);
return primeNums.reduce((add, current) => {
return add += current;
}) + 2; // Add extra 2 since initial 2 is removed.
}
sumPrimes(977);https://stackoverflow.com/questions/68350677
复制相似问题