古月甬 2022-02-02 19:36 采纳率: 50%
浏览 20

有必要这样用埃氏筛法吗?

判断一个数是否质数,可以这样用埃氏筛法吗?还可以怎样优化?


bool isprime(int x)
{
    int a=ceil(sqrt(x));
    int i=2;
    bool isp;
    for(;i<=a;i++)
    {
        isp=true;
        for(int j=2;j<ceil(i/2);j++)
        {
            if(i%j==0)
                isp=false;
        }
        if(isp)
            if(x%i==0)
                return false;
    }
    return true;
}
  • 写回答

2条回答 默认 最新

  • cab_bage 2022-02-03 15:36
    关注

    呃,程序跑着没问题,不过我个人觉得不能算是埃氏筛法,可能是你在第十行那个循环那想先筛去一部分,可是第十行那个循环本身有问题,程序跑出来结果对还是靠后面那个循环,比如以100为例,第十行“筛选”后交给下面循环如图,根本就是完全靠if(isp)在计算,而且计算量远大于一般算法,埃氏算法就在csdn能找到,我就不发了,在循环计算前把它筛去,不让他参加计算,这才是这个算法优化的地方。你的代码用第十行循环和不用的运行时间如下(以1000为例)

    img

    img

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 专家修改了标签 2月3日
  • 创建了问题 2月2日

悬赏问题

  • ¥15 MATLAB读取TXT,并添加度分秒
  • ¥15 excel提示内存不足
  • ¥15 软件安装包用的是openinstall 在普通路由上有一些限速,怎么提速
  • ¥15 msgeq7根据音乐控制电机
  • ¥15 51单片机PN532刷卡原理图代码
  • ¥15 matlab如何不显示绘图而保存为能打开的fig图片?
  • ¥15 oracle数据库备份、
  • ¥15 关于Finetune模型,CUDA error: device-side assert triggered 报错
  • ¥15 能将阿里云上多个设备的信息能上传给小程序吗
  • ¥50 QT6.7 Camera预览窗口,camera分辨率设置