JavaScript 找出素数
JavaScript Find Prime Numbers
我必须将数组中的所有索引都设置为1。然后我必须找到哪些索引不是素数并将它们设置为0。然后打印出数组中所有等于1的索引(质数)。
如果索引不是素数,我无法获取将索引设置为 0 的部分。我现在的输出是它只打印 2-100 中的每个数字。你能帮我算出判断索引是否为素数的条件吗?
<script>
var primeArray = new Array();
for(var i = 0; i < 101; i++){
primeArray[i] = 1;
//document.writeln(" " + primeArray[i]);
}
primeArray[0] = 0;
primeArray[1] = 0;
//document.writeln("" +primeArray[0]);
//document.writeln("" +primeArray[1]);
for(var j = 2; j < 101; j++){
if(primeArray[j] == 1){
for(var k=j+1; k<101; k++){
//var test = j%k;
//document.writeln("" + test);
if(j%k == 0){
primeArray[j]=0;
}
}
}
//if(primeArray[j] == 1){
//document.writeln("" + primeArray);
//}
}
document.writeln("" + primeArray)
</script>
你的循环测试 j%k == 0,但是 k 总是大于 j 因为你的 k 循环从 j+1 开始并且不断变大,所以 j%k 总是等于 j。
我认为你的循环应该是
for(var k=j-1; k>1; k--)
{
if(j%k == 0)
{
primeArray[j]=0;
break; // it's not prime, so move on to the next value for j.
}
}
这不是最佳的素数查找代码,但它会得到正确的结果。
分配给您的是一种可以追溯到古希腊的寻找素数的方法。这是一个简单、直接的过程。
- 创建一个所需大小的数组(最大素数),并将其初始化为某个值(在您的情况下,所有
1
)。
- 将 "trial" 值初始化为 2。
- 检查索引为试验值的数组元素。如果元素值为 1,则试验值为质数。从自己加试值开始,循环遍历数组,将试值的倍数设为0。(如果试值是0,则不是质数,不需要再做任何工作。)
- 增加试验值并继续第3步,当试验值超过数组长度时停止。
当迭代完成时,包含 1 的数组中的条目是素数。
请注意,使用此技术不需要乘法或除法;只是加法。
我将提供一个函数,您可以调用该函数来了解给定数字是否为质数。要对其进行测试,请创建一个文本文件,将其重命名为 prime.html(例如),然后粘贴下一个代码:
<html>
<head>
<title>Prime</title>
<script type="text/javascript">
var X = new Array( 1,2,3,4,5,6,7,8,9 );
function arr () {
var i;
for ( i = 0; i < X.length; i++ )
if ( is_prime( X[ i ] ) )
alert( X[ i ] + " -> set to 1" );
else alert( X[ i ] + " -> set to 0" );
}
function check_prime () {
var num = document.getElementById( "txt" ).value;
if ( is_prime( parseInt( num ) ) )
alert( "Is prime" );
else alert( "Is NOT prime" );
}
function is_prime ( num ) {
var i;
for ( i = 2; i < num; i++ )
if ( ( num % i ) == 0 )
return false;
return true;
}
</script>
</head>
<body>
Enter a number
<input type="text" id="txt" />
<br/>
<button onclick="check_prime()">Check if prime</button>
<br/>
<button onclick="arr()">Check array</button>
</body>
</html>
保存并双击prime.html。输入不同的数字。
既然我们知道它有效,您只需复制函数 is_prime,并将其粘贴到您的代码中,然后在您遍历并检查数组的循环中调用它。
最后在循环中调用is_prime,如果returns为false,则将数组位置设为0。
我用按钮检查数组做了一个例子。测试一下。
我必须将数组中的所有索引都设置为1。然后我必须找到哪些索引不是素数并将它们设置为0。然后打印出数组中所有等于1的索引(质数)。
如果索引不是素数,我无法获取将索引设置为 0 的部分。我现在的输出是它只打印 2-100 中的每个数字。你能帮我算出判断索引是否为素数的条件吗?
<script>
var primeArray = new Array();
for(var i = 0; i < 101; i++){
primeArray[i] = 1;
//document.writeln(" " + primeArray[i]);
}
primeArray[0] = 0;
primeArray[1] = 0;
//document.writeln("" +primeArray[0]);
//document.writeln("" +primeArray[1]);
for(var j = 2; j < 101; j++){
if(primeArray[j] == 1){
for(var k=j+1; k<101; k++){
//var test = j%k;
//document.writeln("" + test);
if(j%k == 0){
primeArray[j]=0;
}
}
}
//if(primeArray[j] == 1){
//document.writeln("" + primeArray);
//}
}
document.writeln("" + primeArray)
</script>
你的循环测试 j%k == 0,但是 k 总是大于 j 因为你的 k 循环从 j+1 开始并且不断变大,所以 j%k 总是等于 j。
我认为你的循环应该是
for(var k=j-1; k>1; k--)
{
if(j%k == 0)
{
primeArray[j]=0;
break; // it's not prime, so move on to the next value for j.
}
}
这不是最佳的素数查找代码,但它会得到正确的结果。
分配给您的是一种可以追溯到古希腊的寻找素数的方法。这是一个简单、直接的过程。
- 创建一个所需大小的数组(最大素数),并将其初始化为某个值(在您的情况下,所有
1
)。 - 将 "trial" 值初始化为 2。
- 检查索引为试验值的数组元素。如果元素值为 1,则试验值为质数。从自己加试值开始,循环遍历数组,将试值的倍数设为0。(如果试值是0,则不是质数,不需要再做任何工作。)
- 增加试验值并继续第3步,当试验值超过数组长度时停止。
当迭代完成时,包含 1 的数组中的条目是素数。
请注意,使用此技术不需要乘法或除法;只是加法。
我将提供一个函数,您可以调用该函数来了解给定数字是否为质数。要对其进行测试,请创建一个文本文件,将其重命名为 prime.html(例如),然后粘贴下一个代码:
<html>
<head>
<title>Prime</title>
<script type="text/javascript">
var X = new Array( 1,2,3,4,5,6,7,8,9 );
function arr () {
var i;
for ( i = 0; i < X.length; i++ )
if ( is_prime( X[ i ] ) )
alert( X[ i ] + " -> set to 1" );
else alert( X[ i ] + " -> set to 0" );
}
function check_prime () {
var num = document.getElementById( "txt" ).value;
if ( is_prime( parseInt( num ) ) )
alert( "Is prime" );
else alert( "Is NOT prime" );
}
function is_prime ( num ) {
var i;
for ( i = 2; i < num; i++ )
if ( ( num % i ) == 0 )
return false;
return true;
}
</script>
</head>
<body>
Enter a number
<input type="text" id="txt" />
<br/>
<button onclick="check_prime()">Check if prime</button>
<br/>
<button onclick="arr()">Check array</button>
</body>
</html>
保存并双击prime.html。输入不同的数字。
既然我们知道它有效,您只需复制函数 is_prime,并将其粘贴到您的代码中,然后在您遍历并检查数组的循环中调用它。
最后在循环中调用is_prime,如果returns为false,则将数组位置设为0。
我用按钮检查数组做了一个例子。测试一下。