牛客网练习题3

时间限制 1000 ms  内存限制 32768 KB  代码长度限制 100 KB  判断程序 Standard  (来自 小小)

题目描述

令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出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

代码:

def is_prime(num):
    if num == 0 or num == 1:
        return 0
    for i in range(2, num):
        if num % i != 0:
            continue
        else:
            return 0
        break
    return 1

def prime_list(M, N):
    l = []
    for i in range(10001):
        if is_prime(i):
            l.append(i)

    k = 0
    for i in range(M+1, N+1):
        print(str(l[i]) + ' ', end='')
        k = k + 1
        while k % 10 == 0:
            print('\n')
            break
    print(str(l[N+1]))

s = input()
l = s.split()
M = int(l[0])
N = int(l[1])
prime_list(M, N)

上面代码本地可以运行,但是内存和时间上可能超出限制了,因此提交没有通过。(还有一些细节有误)

修改一下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 判定是否为素数
def is_prime(num):
     if num ==  0 or num ==  1 :
         return 0
     if num ==  2 :
         return 1
     for i in range( 2 int (num **  0.5 ) +  1 ):
         if num % i !=  0 :
             continue
         else :
             return 0
         break
     return 1
 
 
# 素数的生成器
def prime_gen():
     i =  2
     while True:
         if is_prime(i):
             yield i
         i +=  1
 
 
input_s = input()
l = input_s.split()
M, N =  int (l[ 0 ]),  int (l[ 1 ])
k, p =  1 1
for i in prime_gen():
     if k <= N -  1 and k >= M and p %  10 !=  0 :
         print(str(i) +  ' ' , end= '' )
         p +=  1
     elif k <= N -  1 and k >= M and p %  10 ==  0 :
         print(str(i))
         p +=  1
     elif k == N:
         print(str(i))
         break
     k = k +  1

prime_gen()是一个生成器函数



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值