它必须只有函数,变量,循环等(基本的东西)。从目前为止我学到的东西(从应该能够做到)开始,我无法从头开始编写代码。让我真的很生气:/。 如果你能一步一步地给我,以确保我明白我真的很感激。非常感谢你们。
我怎么能用比这个更简单的代码得到相同的结果:
var primes=4;
for (var counter = 2; counter <= 100; counter = counter + 1)
{
var isPrime = 0;
if(isPrime === 0){
if(counter === 2){console.log(counter);}
else if(counter === 3){console.log(counter);}
else if(counter === 5){console.log(counter);}
else if(counter === 7){console.log(counter);}
else if(counter % 2 === 0){isPrime=0;}
else if(counter % 3 === 0){isPrime=0;}
else if(counter % 5 === 0){isPrime=0;}
else if(counter % 7 === 0){isPrime=0;}
else {
console.log(counter);
primes = primes + 1;
}
}
}
console.log("Counted: "+primes+" primes");
答案 0 :(得分:7)
我今天感觉很顽皮:
function printPrimesBetweenTwoAndOneHundredSimply(){
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97],
i,
arrayLength = primes.length;
for(i = 0; i < arrayLength; i++){
console.log(primes[i]);
}
console.log("Counted: " + arrayLength + " primes");
}
答案 1 :(得分:4)
首先,您实际上不需要使用===
。标准==
就足够了。其次,除了将一个数字分成一行之外,你可以将所有这些行都做成相同的事情:
var primes=4;
for (var counter = 2; counter <= 100; counter = counter + 1)
{
var isPrime = 0;
if(isPrime == 0){
if(counter == 2 || counter == 3 ||counter == 5 || counter == 7)console.log(counter);
else if(counter % 2 == 0 || counter % 3 == 0 || counter % 5 == 0 || counter % 7 == 0)isPrime=0;
else {
console.log(counter);
primes = primes + 1;
}
}
}
console.log("Counted: "+primes+" primes");
您还会注意到{}
已删除几行。这是因为if
(以及其他)之后的单行代码始终被视为嵌套。
接下来,我们可以将您的primes = primes + 1;
更改为:primes++;
,它只会告诉primes
将自己增加1。您的柜台也可以这样做。我们也知道isPrime
等于“0”,因为你在一秒钟前将它设置为,所以我们不再需要if
语句:
var primes=4;
for (var counter = 2; counter <= 100; counter++)
{
var isPrime = 0;
if(counter == 2 || counter == 3 ||counter == 5 || counter == 7)console.log(counter);
else if(counter % 2 == 0 || counter % 3 == 0 || counter % 5 == 0 || counter % 7 == 0)isPrime=0;
else {
console.log(counter);
primes++;
}
}
console.log("Counted: "+primes+" primes");
接下来,我们可以对值进行否定检查(!=
而不是==
),并将else if
与else
合并。由于我们正在进行否定检查(针对此情况),我们必须将OR
s(||
)切换为AND
s(&&
):
var primes=4;
for (var counter = 2; counter <= 100; counter++)
{
if(counter == 2 || counter == 3 ||counter == 5 || counter == 7)console.log(counter);
else if(counter % 2 != 0 && counter % 3 != 0 && counter % 5 != 0 && counter % 7 != 0) {
console.log(counter);
primes++;
}
}
console.log("Counted: "+primes+" primes");
还有很多其他方法可以写它,但我觉得使用你开始使用的东西并从那里缩短它会对你有所帮助。
答案 2 :(得分:1)
这会找到2到100之间的所有素数:
var primes=0;
var isprime = true;
for (var counter = 2; counter <= 100; counter = counter + 1)
{
// For now, we believe that it is a prime
isprime = true;
var limit = Math.round(Math.sqrt(counter)); // See comment from @AresAvatar, below
// We try to find a number between 2 and limit that gives us a reminder of 0
for (var mod = 2; mod <= limit; mod++) {
// If we find one, we know it's not a prime
if (counter%mod == 0) {
isprime = false;
break; // Break out of the inner for loop
}
}
if (isprime) {
console.log(counter, limit);
primes = primes + 1;
}
}
console.log("Counted: "+primes+" primes");
答案 3 :(得分:0)
当然,“更简单”没有定义。 : - )
以下内容可以缩短得多,但内置了一些健壮性。
// Get primes from 0 to n.
// n must be < 2^53
function primeSieve(n) {
n = Number(n);
if (n > Math.pow(2, 53) || isNaN(n) || n < 1) {
return;
}
var primes = [];
var notPrimes = {};
var num;
for (var i=2; i<n; i++) {
for (var j=2; j<n/2; j++) {
num = i*j;
notPrimes[num] = num;
}
if (!(i in notPrimes)) {
primes.push(i);
}
}
return primes
}
所以如果你想要更少的代码:
// Get primes from 0 to n.
// n must be < 2^53
function primeSieve2(n) {
var primes = [], notPrimes = {};
for (var i=2; i<n; i++) {
for (var j=2; j<n/2; j++)
notPrimes[i*j] = i*j;
i in notPrimes? 0 : primes.push(i);
}
return primes
}
答案 4 :(得分:0)
这很简单(我的意思是,简称):
console.log(2); console.log(3);
var m5=25, m7=49, i=5, d=2, c=2;
for( ; i<100; i+=d, d=6-d )
{
if( i!=m5 && i!=m7) { console.log(i); c+=1; }
if( m5 <= i ) m5+=10;
if( m7 <= i ) m7+=14;
}
c
这是sieve of Eratosthenes的“展开”2-3-wheel factorization。
一方面,我们列举了与2和3相互作用的100以下(并且大于3)的所有数字,作为5 + 2 + 4 + 2 + 4 + ...的部分和,所以那里在这样列举的数字中不是2和3的倍数。
另一方面,我们从它们中删除所有5和7的倍数,将它们列为25 + 10 + 10 + 10 + ...和49 + 14 + 14 + 14 +的部分和。 ......首先不存在2和3的倍数,并且需要被Eratosthenes筛子丢弃的11的第一个倍数是121.
答案 5 :(得分:-3)
这对你的问题来说会更简单....
for (int i = 2; i < 100; i++) {
int j = 0;
for (j = 2; j < i; j++)
if ((i % j) == 0)break;
if (i == j)
System.out.print(" " + i);}