matlab求素数

问题描述:

使用素性判断的方法找出1-50之间的素数。在在本任务中,不仅需要您自己编程实现素数判断,而且不能使用从1遍历到根号下n的方法判断。

说白了就是不让用试除法

求素数有一篇很有名的文章,叫“素数求解的N种境界”,请自行在CSDN搜索。这篇文章除了讲解试除法外,还讲解了筛法,本人就是受筛法思想的启发,写了这篇博客。

求解思想大致如下:
创建一个布尔型数组并全部初始化为true,下标是素数的,里面的值仍是true,下标是合数的,里面的值改为false,最后输出值为true的下标。
matlab创建的一维矩阵下标从1开始,这点好评。1不是素数,下标为1的值改为0,也就是为false。2是素数,里面的值不变,然后下标为2的倍数的里面的值改为false。然后依次向下遍历。

代码如下:
P=true(1,50);%创建一个布尔型数组
P(1)=0;%1不是素数
for i=linspace(2,50,49)%创建循环变量
    e=50/i;%求素数的倍数,比如下标为2的倍数的值全改为false,需要知道有多少个2的倍数
    for j=2:e
        if(i*j<=50 && P(i*j)==1)%i*j<50,保证不越界,P(i*j)==1),防止重复,比如6即时2的倍数,又是3的倍数,在找2的倍数的循环中,把下标为6的值改为0;到找下标3的倍数的循环中,就不需要考虑下标为6了。
            P(i*j)=0;
        end
    end
end
for i=2:50%输出素数,没什么好说的
    if(P(i)==1)
        fprintf("%d\n",i)
    end
end

总结:

我写的这个算法仍然很挫,只是避免使用试除法,真正的筛法还分线性筛和欧拉筛等等。不过,我水平实在有限,等后期matlab玩的溜了再继续优化。
也欢迎和我分享你的算法。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值