计算质数

题目:给定一个正整数n,计算出小于等于n的质数有多少个?比如17,则返回7,因为小于等于17的质数有2,3,5,7,13,17。

分析:
1、首先得知道什么是质数?
质数又称素数,如果一个大于1的自然数,除了1和它自身外,没法被其他自然数整除,那么这个自然数就是质数。换句话说,只有两个正因数(1和本身)的自然数即为质数。

2、那么如何判断一个数是质数呢?
思路1:判断一个整数m是否是质数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个质数。

思路2:m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ m \sqrt{m} m 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ m \sqrt{m} m 间任一整数整除,m 必定是质数。原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 m \sqrt{m} m ,另一个大于或等于 m \sqrt{m} m 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4= 16 \sqrt{16} 16 ,因此只需判定在 2~4 之间有无因子即可。

思路3:用空间换取时间的思想,定义一个大小为n+1的数组,都置为True,表示都为质数,然后i从2遍历到根号n,把所有i的倍数都置为False,最后统计True的个数。

对于思路3,给出Python代码如下:

def count_prime(n):
    prime_array = [True] * (n+1)
    i = 2
    while (i * i <= n):
        if (prime_array[i]):
            j = i
            while (i * j <= n):
                prime_array[i * j] = False
                j = j + 1
        i = i+1
        
    count = 0
    for i in range(2,n+1):
        if (prime_array[i]):
            count = count + 1
            print(i,end=" ")
    return count        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值