|
发表于 2016-4-18 17:31:26
|
显示全部楼层
本帖最后由 挥舞乾坤 于 2016-4-18 19:08 编辑
python风格版:
- prime = lambda max=2000000:sum((x for x in range(3,max,2) if all(x % y for y in range(3,int(x**.5)+1))))+2
- print(prime())
复制代码
纯循环版:
- def prime(max=2000000):
- sum = 2
- for n in range(3,max+1,2):
- for i in range(3, int(n**.5)+1):
- if n % i == 0:
- break
- else:
- sum += n
- return sum
- print(prime())
复制代码
最好理解的版本:
- def prime(max=2000000):
- def isprime(num): #判断是不是质数
- for i in range(3,int(num**.5)+1):
- if num % i == 0:
- return False
- return True
- sum = 2
- for n in range(3,max+1,2):#质数肯定是奇数(当然除了2意外)
- if isprime(n):
- sum += n
- return sum
-
- print(prime())
复制代码
再来一个类的版本:
- class Prime:
- def __init__(self,max=2000000):
- self.max = max
- self.first = True
- self.nums = iter(range(3, max+1, 2))
- def __next__(self):
- if self.first:
- self.first = False
- return 2
-
- while True:
- i = next(self.nums)
- if all(i % j for j in range(3, int(i**.5)+1)):
- return i
-
- def __iter__(self):
- return self
-
- def sum(self):
- return sum(self)
- print(Prime().sum())
复制代码 |
评分
-
查看全部评分
|