今天看到百度知道有人问如何验证1000以内的数符合哥德巴赫猜想,就写了一个
感觉超过10000时有点慢啊,和java比起来效率差了点,希望高手能给优化下
#!/usr/bin/env python
__author__ = '淮南霏霏'
"""
脚本编写环境python 3.4.2
哥德巴赫猜想 简单验证
"""
import math
class Goldbach:
"""
哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和
"""
def __init__(self, n=100):
"""
哥德巴赫猜想 构造函数
:param n: n以内的偶数满足哥德巴赫猜想
:return:
"""
self.n = n
def check(self):
"""
验证 n 以内的偶数是否都符合哥德巴赫猜想
:return:
"""
if self.n == 1 or self.n == 2:
print(str(self.n), '以内的偶数都满足哥德巴赫猜想')
return True
it = (i for i in range(3,self.n+1) if i % 2 == 0) # 取出要验证的偶数的迭代器
for i in it:
if not self._conform(i):
print('偶数:', str(i), '不满足哥德巴赫猜想')
return
print(str(self.n), '以内的偶数都满足哥德巴赫猜想')
def _conform(self,n):
"""
判断 n 符合哥德巴赫猜想
:param n: 偶数n
:return:
"""
num = n // 2 + 1
for i in range(2,num):
if self._is_prime(i) and self._is_prime(n-i):
return True
return False
def _is_prime(self,num):
"""
判断一个数是不是质数
:param num:
:return:
"""
num1 = int(math.sqrt(num))
for i in range(2,num1+1):
if num % i == 0:
return False
return True
if __name__ == '__main__':
a = Goldbach(100000)
a.check()