var sum = 0
for (i = 0; i < 250; i++) {
function checkIfPrime() {
for (factor = 2; factor < i; factor++) {
if (i % factor = 0) {
sum = sum;
}
else {
sum += factor;
}
}
}
}
document.write(sum);
Run Code Online (Sandbox Code Playgroud)
我试图检查250以下的所有素数的总和.我收到一个错误,说我在if (i % factor = 0)我原来的语句中创建的语句中无效,但有没有办法在if中引用它声明?
Ste*_*uan 10
通过主要计算,您是否考虑过使用Eratosthenes筛选?这是一种更优雅的方法来确定素数,并且总结结果很简单.
var sieve = new Array();
var maxcount = 250;
var maxsieve = 10000;
// Build the Sieve, marking all numbers as possible prime.
for (var i = 2; i < maxsieve; i++)
sieve[i] = 1;
// Use the Sieve to find primes and count them as they are found.
var primes = [ ];
var sum = 0;
for (var prime = 2; prime < maxsieve && primes.length < maxcount; prime++)
{
if (!sieve[prime]) continue;
primes.push(prime); // found a prime, save it
sum += prime;
for (var i = prime * 2; i < maxsieve; i += prime)
sieve[i] = 0; // mark all multiples as non prime
}
document.getElementById("result").value =
"primes: " + primes.join(" ") + "\n"
+ "count: " + primes.length + "\n"
+ "sum: " + sum + "\n";Run Code Online (Sandbox Code Playgroud)
#result {
width:100%;
height:180px
}Run Code Online (Sandbox Code Playgroud)
<textarea id="result">
</textarea>Run Code Online (Sandbox Code Playgroud)
(编辑)使用更新的算法,现在有两个最大涉及:
您必须通过实际检查实际计数来验证这一点,因为有两个终止条件(1)我们达到筛网的极限并且找不到更多的质数,或者(2)我们实际上找到了我们正在寻找的东西.
如果你要将数字增加到远大于250的数字,那么Sieve不再可行,因为它将消耗大量的内存.无论如何,我认为这一切都有道理吗?在这一点上你真的需要自己玩Sieve,而不是依靠我对它的解释.
你可以同样使用这个
let sum = 0;
let num = 250;
for (let i = 2; i < num; i++) {
let isPrime = true;
for (let j = 2; j < i; j++) {
if (i % j === 0) {
isPrime = false;
}
}
if (isPrime) {
sum += i;
}
}
console.log(sum);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8234 次 |
| 最近记录: |