求100以内素数的和

整体思路是通过素数的定义:在大于1的整数中只能被1和它本身整除的数。

那我们便可以用一个循环,遍历其中每个数,假设有数a,让他们都与另一个循环中的每个数(最大到a-1)相除,这时,如果余数都不等于0,那么这个数便是我们要的素数了。

有了这么一个思路,就可以设计我们要的算法了。

使用普通循环遍历

l = []
for i in range(2, 101):              #定义需要循环的范围
    for j in range(2, i):       
        if i % j == 0:
            break               #如果余数等于0,则说明不是素数,跳出整个循环
    else:
        l.append(i)             #把得到的素数放在list中
print(l)
print(sum(l))

这里用到 for else 循环,除非循环非正常退出,否则执行else

使用filter,lambda

import math
def getPrime():
    return list(filter(lambda x: not [x % i for i in range(2, int(math.sqrt(x)) + 1) if x % i == 0], range(2, 101)))

#filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回


print(getPrime())
print(sum(getPrime()))

这里如果返回filter需要用list()。

https://docs.python.org/3/library/functions.html#filter

Construct an iterator from those elements of iterable for which function returns true.

使用函数

def num(n):
    for i in range(2, n):
        if n % i == 0:
            break
    else:
        return n


results = map(num, range(2, 101))
l=[i for i in results if i]
print(l)
print(sum(l))

你可能感兴趣的:(求100以内素数的和)