博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
素数筛法--SPOJ Problem 2 Prime Generator
阅读量:6420 次
发布时间:2019-06-23

本文共 1340 字,大约阅读时间需要 4 分钟。

质数(prime number)又称素数,除了1和它本身外,不能整除以其他自然数,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。最小的质数是2。

要判断一个整数N是不是质数很简单,看它是否能被2到sqrt(N)之间的整数整除即可。

def isPrime(n):    if n%2==0:        return False    for i in xrange(3,int(math.sqrt(n)+1),2):        if n%i==0:            return False    return True

不过要找出1到N之间的所有质数时,一个个的判定显然不是一个好主意。由于合数可以分解成一系列质数之积,所以1到N之间的合数都是1到sqrt(N)之间某个质数的倍数,排除这些合数,剩余的即为质数:

import mathimport timeitdef findPrime(n):    a=[True]*(n+1)    a[0]=False    a[1]=False    for i in xrange(2,int(math.sqrt(n)+1)):        if a[i]:            k=i*i            while k<=n:                a[k]=False                k=k+i      if __name__=='__main__':    t=timeit.Timer('findPrime(2000000)','from __main__ import findPrime')    print t.timeit(1)

算法从2开始判断是否为质数,并排除质数的倍数,当2至i都被判断后,i+1是否为质数已很明确。

要求找出n至m之间的质数,其中1 <= m <= n <= 1000000000, n-m<=100000。

这种情况下建一个1000000000长度的序列就太浪费空间了,需要先找出1至sqrt(n)之间的质数,然后将n与m之间这些质数的倍数排除:

import mathdef findPrime(n):    a=[True]*(n+1)    a[0]=False    a[1]=False    for i in xrange(2,int(math.sqrt(n)+1)):        if a[i]:            k=i*i            while k<=n:                a[k]=False                k=k+i    for i in xrange(2,n+1):        if a[i]:            yield idef findPrimeBySeed(n,m):    if n==1:        n=2    seed=findPrime(int(math.sqrt(m)))    alist=[1]*(m-n+1)    for prime in seed:           if prime

  

  

 

转载地址:http://gclra.baihongyu.com/

你可能感兴趣的文章
拒绝背后黑手的窥探IPC$漏洞大揭秘
查看>>
DBImport v3.0 中文版发布-支持各大数据库数据互导(IT人员必备工具)
查看>>
WCF服务在JavaScript中使用ASP.NET的AJAX方法
查看>>
谈一谈Cocos2d-x中的某些“大小”
查看>>
加强网站安全、重构公司的门户网站项目(C# VS2003)
查看>>
windows下ACS服务器的认证(h3c)【路由器、交换机】
查看>>
Android通过Socket与服务器进行通信
查看>>
你看到的都是错的!——虚拟化技术的真相
查看>>
打印机的一些高级设置
查看>>
好用的Java数学表达式计算工具——Exp4j
查看>>
浅谈ListBox在Windows Phone 7 中的使用(2)
查看>>
FreeBSD下挂载EXT2,FAT32,NTFS文件系统解决方案下挂载EXT2,FAT32,NTFS文件系统解决方案...
查看>>
拦截器实现文件过滤
查看>>
App-V 4.6 SP1系列之一安装
查看>>
FreeRADIUS 负载均衡和高可用
查看>>
ansible-playbook批量部署zabbix
查看>>
静默安装Oracle数据库10g篇
查看>>
2017软考信息系统项目管理师软考热点
查看>>
十个生成模型(GANs)的最佳案例和原理 | 代码+论文
查看>>
Json拼接字符串必须用双引号
查看>>