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

  

posted on 2015-10-24 00:21  氨蛋三键  阅读(8450)  评论(0编辑  收藏  举报