python程序设计:筛选法求素数

筛选法求素数

1. 题目要求:

使用列表实现筛选法求素数:编写程序,输入一个大于2的自然数,然后输出小于该数字的所有素数组成的列表。

2. 思路解析:

整个题目要求还是比较简单的,只要知道怎么筛选除素数就可以了,涉及的语法和内置函数都是比较常见的。题目需要列出所有小于输入的数字(num),所以我们需要从1遍历num-1,但是1既不是素数也不是合数,所以,我们可以直接从2开始。我们判断一个数是否为素数,就是让它(i)去除所有小于它的数,如果除了1和它本身之外能够整除,那这个数就不是素数。所以我们需要再内嵌一个for循环,遍历所有小于i的数(k),因为能被1整除不能算,所以我们从2开始,又因为如果大于i/2能整除的话,一定在2~i/2之间能整除,所以k的范围就缩小到2 ~ i/2。在python里,i/2可能存在小数,强制转化int会丢失小数,所以可以+1。实际上k的范围可以缩小至2 ~ 根号2的。python里用sqrt(n)函数求根。需要导入from math import sqrt。具体看代码

3. Code:

#!/usr/bin/python

# 声明用于存放素数的列表
primNumber = []
print("请输入正整数:")
# 接收键盘输入
num = input()
# 判断是否为整数,如果不是,结束程序
if num.isdigit():
    # num转化为int类型
    num = eval(num)
    if num > 2:
        # i即为要寻找的素数,常识可知,第一个是2,从2遍历到num
        for i in range(2, num):
            # flag用于标记当前的数是否为素数(true:素数,false:合数)
            flag = True
            # k从2开始遍历到根号i即可,这里图方便,遍历到i/2+1
            for k in range(2, int(i/2) + 1):
                # 判断i是否可被k整除,如果可以,直接判断为合数
                if i % k == 0:
                    flag = False
                    break
            if flag:
                primNumber.append(i)
        print(primNumber)
    else:
        print("输入是数字不能小于2!")
else:
    print("输入了非法字符!")

猜你喜欢

转载自blog.csdn.net/qq_41799219/article/details/104871153