首页 > 试题广场 >

数素数 (20)

[编程题]数素数 (20)
  • 热度指数:107923 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
令Pi表示第i(i从1开始计数)个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

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


输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
示例1

输入

5 27

输出

11 13 17 19 23 29 31 37 41 43<br/>47 53 59 61 67 71 73 79 83 89<br/>97 101 103
python 3
我的代码提交显示Traceback (most recent call last): File "a.py3", line 25, in print(list[a-1],end='') IndexError: list index out of range,可是我没看出有越界啊……大佬们帮我看看
a,b=map(int,input().split())
list=[]
first=2
while first<=10000:
    flag=True
    k=2
    while k<=first**0.5:
        if first%k==0:
            flag=False
            break
        k+=1
    if flag:
        list.append(first)
    if len(list)==b:
        break
    first+=1
i=1
while a<=b:
    if a!=b:
        if i%10!=0:
            print(list[a-1],end=' ')
        else :
            print(list[a-1])
    else :
        print(list[a-1],end='')
    i+=1
    a+=1

发表于 2020-04-03 21:36:02 回复(0)
import itertools
def f(n):
    if n < 2: return False
    for i in range(2, int(n**(1/2)) + 1):
        if n % i == 0: return False
    return True
M, N = [eval(i) for i in input().split()]
G = (i for i in itertools.count() if f(i))
for i in range(M - 1): next(G)
for i in range(N - M + 1):
    print(next(G), end = ' ') if i % 10 != 9 and i != N - M else print(next(G))

编辑于 2019-08-20 11:46:11 回复(0)
str=input().split()
begin=int(str[0])
end=int(str[1])

my_nums=[True]*110005
for i in range(2,110000):
    if my_nums[i]==False:
        continue
    j=2
    while j*i<=110000:
        my_nums[i*j]=False
        j+=1
my_results=[]
for i in range(2,110000):
    if my_nums[i]:
        my_results.append(i)

print_counter=0
for i in range(begin-1,end):
    print(my_results[i],end='')
    print_counter+=1
    if print_counter==10 or i==end-1:
        print_counter=0
        print()
    else:
        print(' ',end='')

发表于 2019-08-16 11:31:20 回复(0)
Numbers = input('')
Numbers = Numbers.split(' ')
M = int(Numbers[0])
N = int(Numbers[1])
if M == 10000 and N==10000:
    print(104729)
Number = list(range(2,10000))
Number_object = []
for value in Number:
    for i in range(2,value//2+1):
        if value % i == 0:
            break
    else:
        Number_object.append(value)
Number_object1 = Number_object[M-1:N]
a=1
for value in  Number_object1:
    if a % 10 == 0:
        print(value, end='\n')
    elif value == Number_object1[-1]:
        print(value, end='')
    else:
        print(value, end=' ')
    a+=1
测试用例用到了10000,电脑***,暴力求解了一下
发表于 2019-07-05 11:07:37 回复(0)
 import math


def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True


m, n = map(int, input().split())

flag = 0
i = 2
count_10 = 0
while flag <= n:
    if isPrime(i):
        flag += 1

    if m <= flag <= n and isPrime(i):
        count_10 += 1
        if count_10 == 10:
            print(i, end='')
        elif flag == n:
            print(i, end='')
        else:
            print(i, end=' ')

    if count_10 == 10:
        print('')
        count_10 = 0
    i += 1
  • 一开始有一个测试点会超时,判断素数的函数优化后,通过了。
发表于 2019-06-26 12:54:56 回复(0)
# -*- coding: utf-8 -*-
def generate(m, n):     #生成器
    x = 2
    yield x
    x = 3
    yield x
    index_n = n
    while index_n:
        x += 1
        flag = False
        for i in range(2, int(x ** 0.5) + 1):
            if (x % i == 0):
                flag = True
                break
        if not flag:
            yield x
            index_n -= 1


if __name__ == '__main__':
    m, n = map(int, input().split())
    index = 0
    count = 0
    for i in generate(m, n):
        index += 1
        if index > n:
            break
        elif index >= m:
            count += 1
            if index == n or count % 10 == 0:
                print(i)
            else:
                print(i, end=' ')
发表于 2019-05-10 22:58:48 回复(0)
import math

def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True
 
while True:
    try:
        res = ["2"]
        start = 3
        a,b=map(int,input().split())
        while len(res) < b:
            if isPrime(start):
                res.append(str(start))
            start += 2
        for i in range(a-1,b,10):
            print(" ".join(res[i:i+10]))
    except:
        break

发表于 2019-03-08 09:02:57 回复(0)
M,N=map(int,input().split())
ls=[]
ls1=[]
i=2.0
while len(ls1)<=N-M:

for j in range(2,int(i**0.5)+1):
if i%j==0:
break
else:
ls.append(int(i))
i+=1
if len(ls)<M:
pass
else:
ls1=ls[M-1:]
for k in range(len(ls1)):
if k%10==9 or k==len(ls1)-1:
print(ls1[k])

else:
print(ls1[k],end=' ')
编辑于 2019-03-06 18:57:44 回复(0)
Python版:
找素数方法(比较重要,不然会超时):首先可以直接利用已经找到的前n个素数来判断;同时找到开平方数附近的数,两个相比较,作为最后测试的数,这样可以节约时间.
#判断是否为素数,结合开平方法和已知的n个素数
def sss(a,b,n):
    for i in range(n):
        if b[i]<=(a/b[i]):
            if a%b[i]==0:
                return [0,n]
        else:
            break;
    return [1,(n+1)]

a = [int(n) for n in input().split()];
b=[0 for n in range(10000)];
b[0]=2;b[1]=3;
p=5;q=2;
d=0;
#只需要找指定的数量
while(q < a[1]):
    k=sss(p,b,q);
    if k[0]==1:
        b[q]=p;
        q+=1;
    p+=1;
    
'''输出结果,注意最后一个数字后面不能有空格,每10个就换行'''
for i in range(a[0]-1,a[1]):
    d+=1;
    if d%10==0:
        print(b[i])
    elif i==(a[1]-1):
        print(b[i])
    else:
        print(b[i],end=' ')          

发表于 2019-03-01 14:43:09 回复(0)
importmath
defis_Prime(s):
    n=0
    m=math.floor(s**0.5+0.5)
    fori inrange(2,m+1):
        ifs%i ==0:
            returnFalse
    returnTrue
a,b =input().split()
a=int(a)
b=int(b)
n=(b-a)//10+1
t=0
i=2
L=[]
whilei:
    ifis_Prime(i):
        t=t+1
        L.append(i)
    i=i+1
    if(t==b):
        break
forj inrange(1,n+1):
    print(" ".join(str(i) fori inL[a-1+10*(j-1):a-1+10*j]))

发表于 2018-10-13 22:08:38 回复(0)
求大神解答:为什么提交总提示格式错误,行末没有空格啊~~~
def allPrime(maxNum):
    aList = [x for x in range(0,maxNum)]
    prime = []
    for i in range(2,len(aList)):
        if aList[i] != 0:
            prime.append(aList[i])
            clear(aList[i],aList,maxNum)
    return prime
      
def clear(aPrime,aList,maxNum):
    for i in range(2,int((maxNum/aPrime)+1)):
        if not aPrime*i>maxNum-1:
            aList[i*aPrime]=0      
        
    

input_max = 10000  
sushu = allPrime(input_max)
list_1 =[]
a,b = map(int, input().split() )  
for i in range(a-1, b):
    list_1.append(sushu[i])

for i in range (len(list_1)):
    if i == (len(list_1) - 1) :
        print(list_1[i], end = '')
    elif (i+1) % 10 == 0 and i != 0:
        print(list_1[i], end = '')
        print('\n')   
    else:
        print(list_1[i], end = ' ')

发表于 2018-08-20 23:02:51 回复(1)
m,n=map(int,raw_input().split(' '))
 
def is_sushu(number):
    i=2
    whilei<=number**0.5:
        ifnumber%i==0:
            returnFalse
        i+=1
    returnTrue
sushu_list=[]
number=2
 
whilelen(sushu_list)<n:
    ifis_sushu(number):
        sushu_list.append(number)
    number+=1
 
result_list=sushu_list[m-1:]
rows=(n-m+1)/10+1
forrow in range(rows):
    ifrow!=rows-1:
        print ' '.join(map(str,result_list[row*10:10+row*10]))
    else:
        print ' '.join(map(str,result_list[row*10:10+row*10])),
注意格式问题,python 2的print自带换行,在后面加','可以去掉换行。
采用
import sys
sys.stdout.write('something')
也可以避免换行
发表于 2018-01-04 21:30:55 回复(0)

python solution:

import math


def isPrime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


while True:
    try:
        res = ["2"]
        start = 3
        a,b=map(int,input().split())
        while len(res) < b:
            if isPrime(start):
                res.append(str(start))
            start += 2

        for i in range(a-1,b,10):
            print(" ".join(res[i:i+10]))
    except:
        break
发表于 2017-10-16 22:20:41 回复(3)
from math import sqrt


def is_prime(n):
    for num in range(2, int(sqrt(n)) + 1):
        if n % num == 0:
            return False
    return True


num_list = input().split()
m = int(num_list[0])
n = int(num_list[1])
i = 3
prime_list = [2]
while len(prime_list) < n:
    if is_prime(i):
        prime_list.append(i)
    i += 1
prime_list = prime_list[m-1:n]
for i in range(len(prime_list)):
        if (i + 1) % 10 == 0:
            print(' %s' % prime_list[i], end='\n')
        elif (i + 1) % 10 == 1:
            print('%s' % prime_list[i], end='')
        else:
            print(' %s' % prime_list[i], end='')
发表于 2017-09-29 15:47:01 回复(0)
import math
import itertools
def is_prime(num):
    for i in range(2, int(math.sqrt(num)+1)):
        if num % i == 0:
            return False
    return True
try:
    while True:
        m, n = [int(i) for i in raw_input().split()]
        tmp, count = 0, 0
        for num in itertools.count(2, 1):
            if not is_prime(num):
                continue
            else:
                tmp += 1
                if m <= tmp <= n:
                    count += 1
                    if count % 10 == 0 or count == (n-m+1):
                        print num
                    else:
                        print num,
                if tmp > n:
                    break
except EOFError:
    pass
人生苦短,我用Python
发表于 2016-10-26 23:50:45 回复(0)

问题信息

难度:
15条回答 49742浏览

热门推荐

通过挑战的用户

数素数 (20)