在Javascript中,我如何找到0- 100之间的质数?我已经考虑过了,但我不确定如何找到它们。我想过做x%x,但我发现了明显的问题。这就是我到目前为止所拥有的:但不幸的是,这是有史以来最糟糕的代码。
var prime = function (){
var num;
for (num = 0; num < 101; num++){
if (num % 2 === 0){
break;
}
else if (num % 3 === 0){
break;
}
else if (num % 4=== 0){
break;
}
else if (num % 5 === 0){
break;
}
else if (num % 6 === 0){
break;
}
else if (num % 7 === 0){
break;
}
else if (num % 8 === 0){
break;
}
else if (num % 9 === 0){
break;
}
else if (num % 10 === 0){
break;
}
else if (num % 11 === 0){
break;
}
else if (num % 12 === 0){
break;
}
else {
return num;
}
}
};
console.log(prime());发布于 2012-09-06 02:26:38
下面是一个在JavaScript中实现sieve的示例:
function getPrimes(max) {
var sieve = [], i, j, primes = [];
for (i = 2; i <= max; ++i) {
if (!sieve[i]) {
// i has not been marked -- it is prime
primes.push(i);
for (j = i << 1; j <= max; j += i) {
sieve[j] = true;
}
}
}
return primes;
}然后,getPrimes(100)将返回一个由2到100之间(包括2和100)的素数组成的数组。当然,由于内存的限制,您不能将其与大参数一起使用。
Java实现看起来非常类似。
发布于 2012-08-15 18:15:55
下面是我如何解决这个问题的。将其从Java重写为JavaScript,所以如果有语法错误,请原谅。
function isPrime (n)
{
if (n < 2) return false;
/**
* An integer is prime if it is not divisible by any prime less than or equal to its square root
**/
var q = Math.floor(Math.sqrt(n));
for (var i = 2; i <= q; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}一个数,n,如果它不能被除1和它本身之外的任何其他数整除,则它是质数。另外,检查数字2,sqrt(n)就足够了。
发布于 2012-08-15 17:15:10
这里是该脚本的实时演示:
首先,创建一个函数来测试单个数字是否为质数。如果您想扩展Number对象,您可以这样做,但我决定让代码尽可能简单。
function isPrime(num) {
if(num < 2) return false;
for (var i = 2; i < num; i++) {
if(num%i==0)
return false;
}
return true;
}此脚本遍历2到1之间的每个小于该数字的数字,并测试如果将该数字除以增量,是否存在没有余数的任何数字。如果有一个没有余数的,它就不是素数。如果数字小于2,则它不是质数。否则,它就是质数。
然后创建一个for循环,循环遍历数字0到100,并使用该函数测试每个数字。如果是质数,则将该数字输出到日志中。
for(var i = 0; i < 100; i++){
if(isPrime(i)) console.log(i);
}https://stackoverflow.com/questions/11966520
复制相似问题