SPOJ 2. Prime Generator
来源:互联网 发布:蔡英文执政能力 知乎 编辑:程序博客网 时间:2024/04/27 14:48
素数判断算法,最简单的为试除法,即若要判断一个数n是否为素数,则判断从2~sqrt(n)的数中的每个数m是否能被n整除,若能整除(n%m==0)则n明显不是素数,否则即为素数。只搜索到sqrt(n),可以通过下面的例子理解,假设n=100,
1*100=1002*50=1004*25=1005*20=10010*10=10020*5=10025*4=10050*2=100100*1=100
即100的约数有1,2,4,5,10,20,25,50,100共9个。但其实很明显在从1找到10也就是sqrt(100)的前半部分的时候,如果100还有除了1以外的约数,就已经都找到了,sqrt(100)再到100之间的和前半部分是一样的,只是因子之间换了下位置而已。而如果某个数在2~sqrt(n)之间的前半部分没有约数的话,那么就说明在后半部分也不会有约数了。当然,这个方法是很慢的,所以代码是TLE的,还有一些其他比较快的方法还没仔细看,因为主要是想了解下python。
import matht=input()while t: l=raw_input() s=l.split(' ') m,n=int(s[0]),int(s[1]) if m==1: m=2 for num in xrange(m,n+1): f=1 for i in xrange(2,int(math.sqrt(num))+1): #sqrt()返回浮点数,xrange的参数需要整数 if num%i==0: f=0 break; if f: print str(num) print t-=1
1. 对于格式化输入,比如题目中要求输入1 10,好像只能通过
l=raw_input()
s=l.split(' ')
m,n=int(s[0]),int(s[1])
来解决
2. range和xrange的却别是range生成一个列表,如range(1,10000000)会生成一个10000000个元素的列表,很明显这样会占用很多内存,而xrange返回的是一个数,和生成的范围是无关的,其占用的内存大小是固定的。在时间上,xrange也会比range快。可以用下面的命令进行测试
$ python -m timeit 'for i in range(1000000):' ' pass'10 loops, best of 3: 90.5 msec per loop$ python -m timeit 'for i in xrange(1000000):' ' pass'10 loops, best of 3: 51.1 msec per loop
但是看到说在python3.0以后就只有range而没有xrange了,range的功能类似于2.x中的xrange,没有进行验证。
- SPOJ 2. Prime Generator
- SPOJ 02 Prime Generator
- SPOJ PRIME1 - Prime Generator【Miller_Rabin
- 【SPOJ-PRIME1】Prime Generator【区间质数筛】
- SPOJ Problem Set 2. Prime Generator 求某区间质数题解
- Prime Generator
- G-Prime Generator|埃式筛法
- spoj2 Prime Generator
- (codechef)Prime Generator
- spoj 1676 Text Generator ac机+矩阵幂 好题!
- SPOJ 1676 Text Generator (ac自动机+矩阵优化)
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- FreeBSD之netgraph简要解析
- 实现接口与显示实现接口的区别
- 各种字符串Hash函数
- PHP 实现多服务器共享 SESSION 数据
- ubuntu 安装python 3.2
- SPOJ 2. Prime Generator
- php中$_SERVER参数HTTP_X_FORWARDED_FOR & REMOTE_ADDR与获取IP
- va_start、va_end、va_list的使用
- confluence安装
- AVR单片机的RTOS-AVRX应用
- android MediaPlayer
- PropertyPlaceholderConfigurer will also read system environment variables
- AVR 内部EEPROM读写式例
- APUE函数笔记十二: 高级IO