Python验证哥德巴赫猜想 今天看到百度知道有人问如何验证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()

今天看到百度知道有人问如何验证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()