标签:
今天看到百度知道有人问如何验证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), ‘不满足哥德巴赫猜想‘) break 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()
标签:
原文地址:http://www.cnblogs.com/shiluocn/p/4906019.html