面试题:求质数的算法

质数也就是大于1的整数中,除了1和它本身以外不能被其他整数整除的数,也叫素数。
问题:
现给定一个任意整型参数 N(N>1),求出小于N 的质数的个数。
 
 例如:
输入 10,输出:4(2,3,5,7);   
输入:20, 输出: 8(2,3,5,7,11,13,17,19);

针对小于N的每个正整数x,我们可以遍历从2到x-1遍历去试除,当出现一个数能被整除,那这个数就不是质数;当然这种方法也是最容易想到的方法,但效率也是最低的方法;

def prime(n):
        m = 0
        res = []
        for i in range(2, n):
            for j in range(2, i-1):
                if i % j == 0:
                    break
            else:
                res.append(i)
                m += 1
        return m,res

if __name__ == "__main__":
    n = 20
    print(prime( n))

 我们可以遍历从2到x/2的数去试除,这样子相对于第一种方法节省了近一半的时间; 

def prime( n):
        m = 0
        for i in range(2, n):
            for j in range(2, int(i/2)+1):
                if i % j == 0:
                    break
            else:
                m += 1
        return m

  

转载于:https://www.cnblogs.com/ivyharding/p/11367911.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值