2015_8_22
头有点疼,改格式改了半天没想到有一个答案还要超时,20分只拿到19分,优化过程手段:
1、一边判断是否为素数一边输出,主函数的时间复杂度位o(n)(一次循环)
2、判断是否素数为了快速跳出循环在进入循环前先查看数字是否会被10以下的素数整除,如果整除直接返回false,如果10以下的素数都不会出现整除情况,则从11开始每次+2进行检查,直到sqrt(目标数字)为止,返回判定结果
智商捉急只能想到这两种优化方案,在第四个测试点上仍然超时,不知道那边可以继续优化,求指出~~~~(是不是python先天计算速度低的原因啊我的天头好疼= =)
附上code
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 22 19:08:13 2016
@author: Administrator
"""
import math
def issushu(num):
if num == 2 or num == 3 or num == 5 or num == 7:
return 1
if num%2 == 0 and num!= 2:
return 0
if num%3 == 0 and num!= 3:
return 0
if num % 5 ==0 and num != 5:
return 0
if num % 7 ==0 and num != 7:
return 0
for i in range(11,int(math.sqrt(num))+1,2):
if(num % (i) == 0):
return 0
return 1
if __name__ == "__main__":
rang = raw_input()
rang2 = rang.split(' ')
start = int(rang2[0])
end = int(rang2[1])
reslist = []
count = 0
count2 = 0
i = 2
while(count<=end):
if(issushu(i) == 1) and count<start:
count += 1
if(issushu(i) == 1) and count>=start:
if(count2 + 1 <=9):
print str(i),
count2 += 1
elif count2+1==10 and count != end-1:
print str(i)
count2 = 0
count += 1
if i == 2:
i += 1
elif i>=3:
i = i + 2