赞
踩
首先要知道除了一和他本身,不能被其他数整除的数叫素数。(1 除外)
一般求从 0 到 n 的所有质数方法就是遍历从 2 到 n-1 的所有整数,挨个判断是否能整除 n 。
优化一下:如果有两个数 j k 相乘等于 n ,那么 j k 两个数一定有一个小于 n^1/2 ,或者两个都是 n^1/2 。
再优化一下:n 如果有因数,那把 n 的所有因数升序排列,最小的那个一定是质数(逻辑问题,仔细想想)
python 是可以直接直接遍历列表,不用下标,直接遍历元素(其他语言好像不可以,不太清楚),那我就直接建一个列表,每找到一个质数就放里面,而我要判断某个数 n 是不是质数,只要判断我的 n-1 质数表中小于 n^1/2 的每一个质数能不能整除 n 就可以,这在需要大量判断质数时可以节省很多时间。
- import math
-
- lst = [2] # 质数表
- for i in range(3,10000): # 创建质数表
- flag = 1
- for j in lst: # lst里装的是所有比 i 小的质数
- if j > math.sqrt(i): # 当用来判断的质数超过 i^1/2 时停止判断
- break
- if i % j == 0:
- flag = 0
- break
- if flag == 1:
- lst.append(i)
-
- # 判断 n 是不是在质数表里(n < 10000)
- n = int(input())
- if n in lst :
- print('{}是质数'.format(n))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。