如何生成100个随机数并检查每个数字的素数?

时间:2015-09-20 20:44:33

标签: javascript

编写一个名为INSERT INTO TOP3SUPP( Top3_Year, Top3_Month, Supp_ID, Total_Expense) SELECT to_char(SYSDATE, 'YYYY'), to_char(SYSDATE, 'MM'), SUPPLIER_ID, total_per_supplier FROM ( SELECT SUPPLIER_ID, SUM(TOTAL) AS total_per_supplier FROM FINANCIAL_EXPENSE Where SUPPLIER_ID IS NOT NULL Group by SUPPLIER_ID Order by total_per_supplier desc ) Where ROWNUM <= 3 的布尔函数,它以整数作为参数,如果参数为素数,则返回true,否则返回true。生成100个随机数,并显示检查每个数字的结果以获得素数。

这应该输出素数的随机数(在真或假检查之后),但我按顺序得到2组数字的结果。

这是我的代码:

isPrime

4 个答案:

答案 0 :(得分:5)

您需要检查arr[i]而不是i的素数:

for(i = 0; i < 100; i++){
    if(isPrime(arr[i])) console.log(arr[i]);
}

答案 1 :(得分:0)

以下代码部分,您正在尝试检查0到100之间的数字

for(i = 0; i < 100; i++){
    if(isPrime(i)) console.log(i);
}

但你应该逐个检查arr数组

for(i = 0; i < 100; i++){
    if(isPrime(arr[i])) console.log(arr[i]);
}

答案 2 :(得分:0)

使用一个对象存储数字让你避免循环检查重复项并移动检查isPrime()让你跳过第二个循环。 (正如@Andrea指出的那样,你的问题是没有将arr [i]传递给isPrime)

var myRandObj = {};
var randomNumber = 0;
for (var i = 0; i < 100; i++) {
    do {
        randomNumber = Math.ceil(Math.random() * 100);
    } while (typeof myRandObj[randomNumber] !== 'undefined');
    myRandObj[randomNumber] = 0;

    if (isPrime (randomNumber))
        console.log (randomNumber);
}

答案 3 :(得分:-2)

console.log(arr)将整个阵列打印到控制台。删除该行以进一步调试。

var arr = []

for(x = 0; x < 100; x++){
    arr[x] = Math.ceil(Math.random()*100)
    }

for(i = 0; i < 100; i++){
    if(isPrime(arr[i])) console.log(arr[i]);
}

function isPrime(num) {
    if(num < 2) return false;
    for (var i = 2; i < num; i++) {
        if(num%i==0)
            return false;
    }
    return true;
}