pat_BL_1013

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值