Javascript 生成随机素数

Javascript 生成随机素数,javascript,math,Javascript,Math,我知道如何检查一个数是否为素数,但现在我需要生成一个随机素数。我如何使用JavaScript实现这一点 const isPrime = num => { for(let i = 2, s = Math.sqrt(num); i <= s; i++) if(num % i === 0) return false; return num > 1; } const isPrime=num=>{ for(设i=2,s=Math.sqrt(num);i

我知道如何检查一个数是否为素数,但现在我需要生成一个随机素数。我如何使用JavaScript实现这一点

const isPrime = num => {
    for(let i = 2, s = Math.sqrt(num); i <= s; i++)
        if(num % i === 0) return false; 
    return num > 1;
}
const isPrime=num=>{
for(设i=2,s=Math.sqrt(num);i=1;
}
您可以使用Math.floor(Math.random())生成一个随机数。如果我们将两者结合起来,您的代码将如下所示:

function rnd(min, max) => {
   return Math.floor(Math.random() * max) + min;
}
function getPrime(min, max){
   x = rnd(min, max)
   if(isPrime(x)) return x;
   else return getPrime(min, max);
}
当您需要一个随机素数时,只需使用两个参数调用函数getPrime:max value和min value

更新


你可以在while循环中做同样的事情,或者创建一个素数数组并生成一个随机索引,然后在数组中取素数。

正如@ggorlen所指出的,事先找到所需范围内的所有素数并随机返回其中一个,效率更高

为了找到所有的素数,我们应该使用算法。我们还需要一个函数来生成一个随机整数

最后,我们可以将两者结合起来,创建所需的函数,以生成范围[min,max]内的随机素数

以下是我的实现:

//Eratosthenes筛
常量getPrimes=(最小值,最大值)=>{
常量结果=数组(最大值+1)
.fill(0)
.map((u,i)=>i);
for(设i=2;i{
返回Math.floor(Math.random()*(max-min+1)+min);
};
常量getRandPrime=(最小值,最大值)=>{
常量素数=获取素数(最小值、最大值);
返回素数[getRandNum(0,primes.length-1)];
};
//范例

控制台日志(getRandPrime(1001000))
您尝试过什么方法?生成数字直到其中一个是素数,生成给定范围内的所有素数,然后生成一个随机索引。嗨,安德烈亚斯。对不起,我不明白您的意思……为什么您在评论我关于生成随机数直到其中一个是素数的建议时会这样回答:“难道没有更快的方法吗?"?这似乎是对递归的不当使用。如果运气不好,可能会破坏调用堆栈,即使运气好,也会增加大量开销。循环会更快更安全。此外,与尝试随机数并在找到素数时停止相比,您可以使用a生成某个范围内的素数,然后从中选择。OP需要一个fast方法,但这不能保证有一个界限,并且使用了OP低效的
isPrime
函数。