首页 > 试题广场 >

筛选法求素数

[编程题]筛选法求素数
  • 热度指数:27826 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

输入描述:
多组输入,每行输入一个正整数(不大于100)。


输出描述:
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,

第二行,输出数组中2之后被清0 的个数。每行输出后换行。
示例1

输入

20

输出

2 3 5 7 11 13 17 19
11
n = int(input())
arr = (i for i in range(2,n+1))
def func(arr):
    counts = 0
    char = ''
    for i in arr:
        flage = 1
        med = int(pow(i,0.5))
        for j in range(2,med+1):
            if i%j == 0:
                flage=0
                break
        if flage:
            char+=" "+ str(i)
        else:
            counts += 1
    print(' '.join(char.split()))
    print(counts)           
func(arr)

发表于 2024-09-28 00:32:48 回复(0)
数列a = 合数b + 质数c
while True:
    try:
        n = int(input())
        a = [x for x in range(2,n+1)]
        b = []
        for i in a:
            for j in range(2,i):
                if i%j == 0:
                    b.append(i)
                    break
        c = [x for x in a if x not in b]
        print(*c)
        print(n-len(c)-1)
    except:
        break


编辑于 2024-02-07 16:01:19 回复(0)
n = int(input())
lis = [i for i in range(2, n+1)]
for i in range(len(lis)):
    if lis[i] != 0:
        for j in lis[i+1:]:
            if j != 0 and j%lis[i] == 0:
                lis[lis.index(j)] = 0
for i in lis:
    if i != 0:
        print(i, end=" ")

print(f"\n{lis.count(0)}")  
发表于 2023-04-13 15:18:06 回复(0)