• PAT 数素数


    令 Pi 表示第 i 个素数。现任给两个正整数 M <= N <=104,请输出 PM 到 PN 的所有素数。

    输入格式:

    输入在一行中给出 M 和 N ,其间以空格分隔。

    输出格式:

    输出从 PM 到 PN 的所有素数,没 10 个数字占 1 行,但行末不得有多余空格。

    输入样例:

    5 27

    输出样例:

    11 13 17 19 23 29 31 37 41 43
    47 53 59 61 67 71 73 79 83 89
    97 101 103
    from math import sqrt
    def prime(x):
        k=int(sqrt(x))
        if x==0 or x==1:
            return False
        for i in range(2,k+1):
            if x%i==0:
                return False
                break
        return True
    s=2**17
    a=[]
    a.append(2)
    for i in range(1,s,2):
        if prime(i):
            a.append(i)
    # print(a)
    p=1
    x,y=map(int,input().split())
    for i in range(x-1,y):
        if p%10==0 or i+1==y:
            print(a[i])
        else:
            print(a[i],end = " ")
        p+=1
    # print(p)

    这道题目主要考查素数的筛选,要求挑出第 1 到 10000 个素数。这种挑选素数的方法就是直接根据定义去找,没有任何的优化,试了一下,第 10000 个素数是 104729 ,而恰好我写到 2 的 17 次方是 131072,这时我在牛客网提交刚好可以通过所有测试点,而在pta提交会有一个测试点通不过,所以,还是要优化一下,我又使用了普通筛选法(埃拉托色尼筛选法):

    import math
    b=2**18+1
    a=[0]*b
    c=[]
    for i in range(2,len(a)):
        a[i]=i
    for i in range(2,int(math.sqrt(len(a)))+1):
        if a[i]!=0:
            for j in range(i+i,len(a),i):
                a[j]=0
    for i in a:
        if i:
            c.append(i)
    p=1
    x,y=map(int,input().split())
    for i in range(x-1,y):
        if p%10==0 or i+1==y:
            print(c[i])
        else:
            print(c[i],end = " ")
        p+=1

    普通筛选法的基本思想就是素数的倍数一定不是素数,根据这个筛选法,pta就可以写到 2 的 18 次方了,因为我用了两个很大的列表,所以太大又会导致内存超限,反正,至少这个筛选法要比根据定义去筛选 1s 能多计算 130000 多的数据,还是不错的。

  • 相关阅读:
    告别ThinkPHP6的异常页面, 让我们来拥抱whoops吧
    ThinkPHP6 上传图片代码demo
    【ThinkPHP6:从TP3升级到放弃】1. 前言及准备工作
    PHP数字金额转换大写金额
    提高PHP开发效率, PhpStorm必装的几款插件
    5分钟弄懂Docker!
    GitHub 上排名前 100 的 IOS 开源库简介
    GitHub 上排名前 100 的 Android 开源库简介
    android线程消息传递机制——Looper,Handler,Message
    Android Activity:四种启动模式,Intent Flags和任务栈
  • 原文地址:https://www.cnblogs.com/andrew3/p/12625750.html
Copyright © 2020-2023  润新知