[英]Finding sequence of prime numbers with JS
我必須得到一個質數序列。 但是我的代碼不起作用。 怎么可能修復它?
var num1 = parseInt(prompt('Enter a number'));
var num2 = parseInt(prompt('Enter a number'));
var num3 = 0;
function primeSeq(num1, num2) {
var b = 1;
var c = '';
if (num1 > num2) {
num3 = num2;
num2 = num1;
num1 = num3;
}
for (var i = num1; i < num2; i++) {
for (var j = 2; j < i; j++) {
if (i % j == 0) {
b++;
}
if (b <= 1) {
c += i + ' ';
}
}
}
return c;
}
alert(primeSeq(num1, num2));
我猜你想要這樣的東西
var num1 = parseInt(prompt('Enter a number'));
var num2 = parseInt(prompt('Enter a number'));
var num3 = 0;
if (num1 > num2) {
num3 = num2;
num2 = num1;
num1 = num3;
}
function primeSeq(num1, num2) {
var b;
var c = '';
for (var i = num1; i < num2; i++) {
b = 1;
for (var j = 2; j < i; j++) {
if (i % j === 0) {
b++;
}
}
if (b === 1) {
c += i + ' ';
}
}
return c;
}
alert(primeSeq(num1, num2));
所以簡而言之, b
應該在每個新的主要候選者( i
循環)上重置為 1 並且對b
檢查應該在內部( j
)循環之外。
請注意,還有更多最佳算法。
更簡單的方法是使用篩分系統,如果一個數可以被另一個素數整除,它就不是素數。 你可以寫一個這樣的函數:
function primes(max) {
let primes = [2];
for (let i = 3; i <= max; i++) {
let found = true;
for (let j = 0; j < primes.length; j++) {
if (i % primes[j] == 0) found = false;
}
if (found) primes.push(i);
}
return primes;
}
說明
默認情況下,您知道 2 是素數,因此您從 3 開始。您不想超出最大值,即i <= max
語句。 假設它是一個素數,然后在數組中搜索它是否可以被您之前找到的素數整除,如果是這樣,則將 found 設置為 false。 現在檢查是否找到了,推送到數組並返回素數。
這是更優化的算法:
function primeSeq(num1, num2) {
var primes = [];
var isPrime;
var j;
var results = [];
for (var i = 2; i < num2; i++) {
isPrime = true;
j = 0;
while (j < primes.length) {
if (i % primes[j] === 0) {
isPrime = false;
break;
}
j++;
}
if (isPrime) {
primes.push(i);
if (i >= num1) {
results.push(i);
}
}
}
return results.join(' ');
}
為了使數字成為素數,它不能與所有較小的素數相除,因此我們生成了一個primes
數組進行檢查。 還有一種理論認為每個大於 3 的質數都有以下形式:
6k+1 or 6k-1
所以這會更簡化它。
試試這個
<input ng-model="range" type="number" placeholder="Enter the range">
<button ng-click="findPrimeNumber(range)">
$scope.findPrimeNumber=function(range){
var tempArray=[];
for(var i=0;i<=range;i++){
tempArray.push(i)
}
var primenumbers= tempArray.filter((number) => {
for (var i = 2; i <= Math.sqrt($scope.range); i++) {
if (number % i === 0) return false;
}
return true;
});
console.log(primenumbers);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.