筛法求素数

筛法由2400多年前的埃拉托斯特尼发明而出。

埃拉托斯特尼是古希腊著名的数学家、地理学家、历史学家、诗人、天文学家,他最出名的成就就是他在当时的条件下测出了地球的周长。

他同时也发明了求素数的筛法。

这是我整理的一张思维导图,可以看一下。

更加具体的做法就是:

一、找出1到30之间的所有数

二、由于已知一不为素数,则划去1,得到2,3,4,5......29,30

三、找出所有2的倍数并划去,但保留2,得到2,3,5,7,9,11,13,15,17,19,21,23,25,27,29

四、找出所有3的倍数并划去,但保留3,得到2,3,5,7,11,13,17,19,23,25,29

五、以此类推分别从左往右挨个找数(找2,3,5,7,11......),不断划去它们的倍数,就可得出素数

代码解释:

N = int(input("请输入一个大于2的整数:"))
for i in range(2,N):
    a = 1
    for j in range(2,i):
        if (i % j ) == 0:
            a = 0
            break
    if a == 1:
        print(i)

N可以显示你输入一个大于2的整数

然后重复执行2到N(你输入的数)次。

再重复一遍,次数:由2到i(第一次循环的i)。

如果再第二次循环中i除以j余数为0,也就是可以整除,则a就等于0

break可加可不加,主要用于加快运行速度

回到第一个循环当中,在二次循环时,如果没有成功整除,a也就没有变为0,则如果二次循环后a还是1,就代表这个数是素数,就会打印它。

结果:

请输入一个大于2的整数:150
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值