方法一 老方法
for i in range(2,101):
for p in range(2,i):
if i%p == 0:
break
else:#注意else的位置,如果和if同位置,同一个数就会输出多次
print(i,end=" ")
素数(prime number)
是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
- 遍历循环每一个数逐一确认是否为素数
- 对于一个数:遍历比它小的数作为除数,若有整除的情况则该数不是素数
根据这个思想我们可以定义一个找素数函数
def is_prime(n):
for i in range(2,n):
if n%i == 0:
return False
return True
ls = []
for i in range(2,100):
if is_prime(i):
ls.append(str(i))
print(" ".join(ls))
其中
- str(x) 任意类型x所对应的字符串形式
- ls.append(x) 在列表ls最后增加一个元素x
- join(ls) 在join前面的字符串分割放置到后边的join参数中的各个元素之间
一行代码解
print(' '.join(str(i) for i in range(2,101) if 0 not in [i%p for p in range(2,i)]))
方法二 sqrt函数
开根减少验证素数时的工作量
form math import sqrt
def is_prime(n):
if n == 1:
return False
for i in range(2,int(sqrt(n)+1)):
if n%i == 0:
return False
return True
start = 2
end = 100
print(' '.join(str(i) for i in range(start,end+1) if is_prime(i)))
方法三 set函数
创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
not_prime=[]
for i in range(2,101):
for p in range(2,i):
if i%p == 0:
not_prime.append(i)
break
target = list(range(2,101))
prime=list(set(target)-set(not_prime))
print(' '.join(str(i) for i in prime))
判断出not_prime的过程更为简洁,再利用set方法计算差集
未完待续。。。