首页 > 试题广场 >

筛选法求素数

[编程题]筛选法求素数
  • 热度指数:108 时间限制: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())
ss = list(range(2,n+1))
i = 2
while i<n:
  res = []
  for j in range(len(ss)):
    if ss[j]<=i or (ss[j]>i and  ss[j]%i != 0):
      res.append(ss[j])
  i += 1
  ss = tuple(res)
res1 = ""
for number in ss:
  res1 += str(number)+" "
print(res1.strip())
print(n-1 - len(ss))
减少重复判断
发表于 2019-09-12 17:56:23 回复(0)