素数简介:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
素数
1、素数的普通解法 直接上代码

import math
L=[2]
n=int(input("请输入所求素数的上限:"))
for x in range(1,n):for i in range(2,x):if x%i==0:breakelse:pass#只需除到x的根号 挨着除完效率低if(i>math.sqrt(x)):  #if(i==x-1):   效果一样# print(x,",是一个素数")L.append(x)break
print(L)

这种方法求小一点的素数范围还行,如果数大一点就很慢了。比如输入n为1000000或者更大,上述方法效率就非常低了,运行时间太长。那怎么快速的求解呢,请看下面。

2、筛选法求解素数(埃拉托色尼筛选法)
具体原理
计算素数的一个方法是埃氏筛法,它的算法理解起来非常简单:
首先,列出从2开始的所有自然数,构造一个序列:
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
取新序列的第一个数5,然后用5把序列的5的倍数筛掉:
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
不断筛下去,就可以得到所有的素数。

代码实现如下:

""" 求1000000以内的素数 """
n = 1000000
l1 = [True for i in range(n+1)]   #生成一个全是True的的数组
for i in range(2,n+1):            #2开始,遇到2的倍数(4,6,8,10...)都赋值为Falsej=i+i                         #3开始,遇到3的倍数(6,9,12...)都赋值为Falsewhile j<n:                    #以此类推,把所有数字的倍数都赋值为Falsel1[j]=False               #输出值是True的数组下标j = j + i
print("素数:")
T=[]
for i in range(2,n):if l1[i]==True:print(i,end=" ")T.append(i)

这种方法就很快了,想知道时间的小伙伴,可以导入time模块算出运行时间,不会的就百度一下,这里就不赘述了。

以下还有几种筛选法的不同写法代码,效果一样


def countPrimes(n):"""初始所有一个n维数组 res 表示数都为素数。从3开始将3的奇数倍标记成False,即不是素数。之后对每一个素数此行上一步操作这里我们不用管偶数倍,因为我们最后判定时默认所有偶数不是素数"""if n < 3: return [2]res = [True] * nfor i in range(3, int(n ** 0.5) + 1, 2):res[i * i::2 * i] = [False] * ((n - i * i - 1) // (2 * i) + 1)return [2] + [i for i in range(3, n, 2) if res[i]]print(countPrimes(1000000))
i=int(input('please enter  an integer:'))
#创建一个空list
r=list()
#添加元素2
r.append(2)
#从3开始挨个筛选
for a in range(3,i):b=False
#用a除以小于a的质数bfor b in r:if a % b == 0:b = Falsebreakelse:b = Trueif b == True:r.append(a)
print(r)
def primes(n):if n < 2:  return []if n == 2: return [2]s = list(range(3, n, 2))mroot = n ** 0.5half = len(s)i = 0m = 3while m <= mroot:if s[i]:j = (m * m - 3) // 2s[j] = 0while j < half:s[j] = 0j += mi = i + 1m = 2 * i + 3return [2] + [x for x in s if x]
print(primes(1000000))

谢谢点赞。

Python 求素数之多方法解析相关推荐

  1. 用python求素数的方法,以及一种算法优化

    python求素数 前言 方法一 1.代码 2.输出结果 方法二 1.代码 2.输出结果 前言 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数(该解释来自百度百科). 如果要找1 ...

  2. python判断素数的函数_如何用python求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  3. python求素数算法_Python程序最多可计算n个质数(使用不同算法)

    python求素数算法 There are various methods through which we can calculate prime numbers upto n. 我们可以通过多种方 ...

  4. crc32函数python,python求crc32值的方法

    本文实例讲述了python求crc32值的方法.分享给大家供大家参考.具体实现方法如下: 要想求CRC值,前面要import binascii binascii.crc32(v) 求出了v的crc32 ...

  5. python求素数的函数_如何用python求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  6. python求圆面积_python如何求圆的面积 python求圆的面积方法

    python如何求圆的面积?本篇文章小编给大家分享一下python求圆的面积方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 首先我们要知道圆的面积计算 ...

  7. python求素数积_用Python求素数的快速算法源码示例

    本篇文章为Python算法相关,用Python求素数的快速算法源码示例.算法在Python的学习中算是一个要点,能研究明白算法的同学都可以算的上是Python的大牛了. 首先简单的来说下什么是素数:质 ...

  8. python求素数平均值_用python怎么求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  9. python找列表中相邻数的个数_利用python求相邻数的方法示例

    前言 本文主要给大家介绍了关于利用python求相邻数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的 ...

最新文章

  1. 实战:vue项目中导入swiper插件
  2. Matlab-实时编辑器介绍
  3. C语言程序练习-L1-002 打印沙漏 (20分)
  4. 基于java语言轻量级实时风控引擎
  5. iqoo玩游戏怎么回主界面_科普向:iQOO游戏功能到底怎么用?
  6. linux获取文件名最后一位,获取出文件最后一位是1 或者0 若果都是1 代表是正确的 如果有0代表错误...
  7. WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
  8. B. Hierarchy
  9. Linux(Centos)服务器时间校准
  10. [NOIP2007]矩阵取数游戏(详细题解、含多种思路)
  11. 【洛谷刷题笔记】P4093 [HEOI2016/TJOI2016] 序列
  12. 笔记本安装Ubuntu9.04.图文并茂
  13. 1期精彩推荐:如何应对工作中的冲突?
  14. RFC系列协议--rfc2461--Neighbor Discovery for IP Version 6 (IPv6)
  15. python3安装要钱吗_3b1b/manim数学动画引擎安装教程(2020-8月)
  16. offiice2013全套软件,加破击工具,教程,真是验证过链接:https://pan.baidu.com/s/1Csv4ZXDQyK_cKfpIXwwn6Q 提取码:h7dp 复制这段内容后打
  17. Android-打开系统相机并拍照两种显示方式。
  18. KF32A146之IIC读写外部EEPROM
  19. for循环加switch语句中的break与continue的用法
  20. 发明三国杀游戏的计算机天才楼天城回母校杭十四中(楼教主orz)

热门文章

  1. AVR单片机烧写Arduino-bootloader
  2. 00037美学选择题汇总(2011.4-2018.10)
  3. Towards Robust Deep Hiding Under Non-Differentiable Distortions for Practical Blind Watermarking论文阅读
  4. 基础知识学习---牛客网C++面试宝典(五)C/C++基础之新特性
  5. 华三M-lag典型配置
  6. JAVA毕业设计HTML5“忆红楼梦之味”网站设计与实现计算机源码+lw文档+系统+调试部署+数据库
  7. 在Vue中使用HappyPack
  8. java计算机毕业设计基于安卓Android的运动健身打卡管理软件 uniapp
  9. 为什么Python编程语言应用如此广泛?
  10. h5端移动端软键盘弹起改变高度问题