判断一个数是否为素数 执行效率最高

博客探讨了如何改进算法,以最快的方式判断一个数是否为素数,特别提到通过先判断是否为2的倍数来排除偶数,提高执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 <script>
        function odds(num){
            // var num=9; 
            var flag=true;//逻辑值 true为素数 false不是素数
            var count=0;//循环次数
            if(num==0 || num==1){
                console.log(num+" 不是素数");
            }else{
                // 
                var sqrtNum=Math.sqrt(num);
                for(var i=2;i<=sqrtNum;i++){ 
                    count++;
                    if(num%i==0){
                        // count++;
                        flag=false;
                        break;
                    }
                }
                if(flag==true){
                    console.log("当整数为 "+ num +" 时,num不可以被i整除");
                    console.log(num+"是素数");
                }else{
                    console.log("当整数为 "+ num +" 时,i为 "+ i +"时,因为num/i== "+ num/i +" ,所以num可以被i整除");
                    console.log(num+"不是素数")
                }
            }
           
            console.log("循环次数:"+count);
        }
        var nums=parseInt(prompt("请输入一个整数来判断是否为素数"));
        console.time("执行时间");//起始时间
        odds(nums);//执行待测函数
        console.timeEnd("执行时间");//测试时间

    </script>

改进版
加了个判断 如果是2的倍数 为后面的循环筛选掉了偶数

<script>
function odds(num){
    // var num=9; 
    var flag=true;//逻辑值 true为素数 false不是素数
    var count=0;//循环次数
    if(num==0 || num==1){
        console.log(num+" 不是素数");
    }else if(num % 2==0){
         console.log(num+" 不是素数");
    }
    else{
        // 
        var sqrtNum=Math.sqrt(num);
        for(var i=3;i<=sqrtNum;i+=2){
            count++;
            if(num%i==0){
                // count++;
                flag=false;
                break;
            }
        }
        if(flag==true){
            console.log("当整数为 "+ num +" 时,num不可以被i整除");
            console.log(num+"是素数");
        }else{
            console.log("当整数为 "+ num +" 时,i为 "+ i +"时,因为num/i== "+ num/i +" ,所以num可以被i整除");
            console.log(num+"不是素数")
        }
    }
   
    console.log("循环次数:"+count);
}
var nums=parseInt(prompt("请输入一个整数来判断是否为素数"));
console.time("执行时间");//起始时间
odds(nums);//执行待测函数
console.timeEnd("执行时间");//测试时间
</script>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值