我靠,这么简单的东西弄了这么久,无语。。。。
import numpy as np
from PIL import Image
#方法1 自己想的
a=[]
c=[]
#找出合数
for i in range(1,100):
b = []
for j in range(2,int(np.sqrt(i)+1)):
if i % j ==0 :
b.append(j)
if len(b)>0:
#print(i,b)
a.append(i)
#print(a)
#不是合数那就是素数
for i in range(2,100):
if i not in a:
c.append(i)
print(c)
#创建一个list验证结果
d=[]
for i in range(2,100):
d.append(i)
print(d)
print(list(set(d).difference(set(a))))
#方法2 别人的方法
def find_prime_list(n):
"""返回不大于n的素数组成的numpy数组"""
nums = np.arange(n + 1) # 生成0到n的数组
nums[1] = 0 # 数组第1和元素置0,从2开始,都是非0的
k, m = 0, pow(n + 1, 0.5)
while True: # 循环
primes = nums[nums > 0] # 找出所有非0的元素
if primes.any(): # 如果存在不为0的元素
p = primes[k] # 则第一个元素为素数
k += 1
nums[2 * p::p] = 0 # 这个素数的所有倍数,都置为0
if p > m: # 如果找到的素数大于上限的平方根
break # 则退出循环
else:
break # 全部0,也退出循环
return nums[nums > 0]
print(find_prime_list(100))