求一段代码,用js求前500个素数

不是1-500之间的素数,是前500个素数... 不是1-500之间的素数,是前500个素数 展开
 我来答
lyz810
推荐于2017-09-21 · 知道合伙人互联网行家
lyz810
知道合伙人互联网行家
采纳数:7531 获赞数:31775
前端开发工程师

向TA提问 私信TA
展开全部

以下代码可以实现JavaScript求n个素数,当n=500时满足题目需求。

function prime(n){
    var primeArr = [2];
    var isPrime = function(num, primeList){
        if(num == 2){
            return true;
        }
        for(var i = 3, iLen = Math.sqrt(num), j = 1; i <= iLen; i = primeList[j++]){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    if(isNaN(n) || n < 1){
        return [];
    }
    for(var i = 0, iLen = n - 1, j = 3; i < iLen; j+= 2){
        if(isPrime(j, primeArr)){
            primeArr.push(j);
            i++;
        }
    }
    return primeArr;
}
//函数调用
prime(500);//得到一个长度为500的数组,里面按顺序放着前500个素数

算法分析:

  1. 素数即除去1和其本身两个数之外,不能被任何数整除的整数。

  2. 由公理可知,如果一个整数能被分解成多个整数,则必有一个数不大于该整数的平方根(反证法可知,如果分解成的两个数都大于平方根,则乘积必大于原数),故在循环时,只需循环到该数的平方根即(Math.sqrt(num)为求平方根)

  3. 如果一个数能被2整除,则除2之外其他数都不是素数,故从3开始遍历能够减少循环次数

  4. 如果一个数能够被分解,则最终分解结果必然为多个素数之积,故循环时只需要尝试之前算好的素数能否整除当前的数,极大减少循环次数

  5. 500个素数不会存在2个素数之间间隔大于上一个素数的平方的情况,此函数在前提条件下是安全的

nanhay
2010-07-16 · TA获得超过1173个赞
知道小有建树答主
回答量:824
采纳率:0%
帮助的人:998万
展开全部
#include<stdio.h>
int main()
{
int i,n,num=0;
for (i=0;num<500;i++)//num来计算素数个数
{
for (n=2;n<i;n++)//此处用<=sqrt(i) 效率会高点
if (i%n==0)
break;
if (n==i) //输出素数并累加个数
{
num++;
printf("%10d",i);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2fa8b9d
2010-07-16 · TA获得超过810个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:628万
展开全部
<script language="javascript">
function ss(){
str = ""
for(var i=1;i<=500;i++){
ifss = true
for(var j=2;j<i;j++){
if(i%j==0){
ifss = false;
break;
}
}
if(ifss==true){
str = str+i+","
}
}
return str
}
alert(ss())
</script>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式