《质数》判断质数(较快的方法C++)

前言

  to be honest,我感觉我也刷了1,200道题了,真是有的题刷了一次又一次,但是还是存在会的还是会,不会的还是不会。因而我就思考是不是我的做题模式出现了问题。下面展示一下我之前的做题风格,

哎,还是走高三的老路,就是刷题,不总结,不分类,只追求数量。为了改善这种情况,我决定做好总结与分类,以求有所进步。

正题:

bool isPrime(int a) {
    if(a == 1) return 0;
    if(a == 2 || a == 3) return 1;
    if(a%6 != 1 && a%6 != 5) return 0;
    int sqrtA = sqrt(a);
    for(int i = 5; i <= sqrtA; i += 6) {
        if(!(a%i)|| !(a%(i+2))) return 0;
    }
    return 1;
}

  思路解析:规律就是把大于等于5数按%6分类,会有余数为0 ,1,2,3,4,5共6种情况,这六种情况中,0,2,3,4是不行的,有可以整除的数,只有1,5满足, 那么就对余数为1,5的这一类数记为A类进行判断,只要他们不被比自己小的A类的数整除,就可以说明这个数是质数。时间复杂度(sqrt(n)/3)相当于只用判断小于sqrt(n)的1/3的数。

思考:

  做事之前先思考大多数情况下都会很省时间!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值