用python多进程验证哥德巴赫猜想
2017-06-29 12:04
267 查看
本文通过遍历证明哥德巴赫强猜想,即任一大于2的偶数都可写成两个质数之和。
具体哥德巴赫猜想的说明见百度百科
http://baike.baidu.com/link?url=UTeBqPjPHD9S5ydgNzTko7kcrF1mvc8SOssOBm04Vxcl1GlB9Hbs5p9LlVSwRy_alvzEeMbX4xJ7tFo9Z_WpHjVYXwlNQJXtgUU4NnptrQK2oIiBoKXJdjDfuBJ-Z5m0OvZ1cr-kvW4BtFZNwNsDIq
下面是代码实现。通过分治的思想,把整个数据空间分段计算,因为是计算密集型任务,所以采取多进程。
具体哥德巴赫猜想的说明见百度百科
http://baike.baidu.com/link?url=UTeBqPjPHD9S5ydgNzTko7kcrF1mvc8SOssOBm04Vxcl1GlB9Hbs5p9LlVSwRy_alvzEeMbX4xJ7tFo9Z_WpHjVYXwlNQJXtgUU4NnptrQK2oIiBoKXJdjDfuBJ-Z5m0OvZ1cr-kvW4BtFZNwNsDIq
下面是代码实现。通过分治的思想,把整个数据空间分段计算,因为是计算密集型任务,所以采取多进程。
import math import time from multiprocessing import cpu_count from multiprocessing import Pool # 判断数字是否为质数 def isPrime(n): if n <= 1: return False for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True # 验证大于2的偶数可以分解为两个质数之合 # T为元组,表示需要计算的数字区间 def GDBH(T): S = T[0] E = T[1] if S < 4: S = 4 if S % 2 == 1: S += 1 for i in range(S, E + 1, 2): isGDBH = False for j in range(i // 2 + 1): # 表示成两个质数的和,其中一个质数不大于1/2 if isPrime(j): k = i - j if isPrime(k): isGDBH = True if i % 100000 == 0: # 每隔10万个数打印一次 print('%d=%d+%d' % (i, j, k)) # print('%d=%d+%d' % (i, j, k)) break if not isGDBH: # 打印这句话表示算法失败 或是猜想失败(怎么可能...) print('哥德巴赫猜想失败!!') break # 对整个数字空间N进行 分段CPU_COUNT def seprateNum(N, CPU_COUNT): list = [[i + 1, i + N // 8] for i in range(4, N, N // 8)] list[0][0] = 4 if list[CPU_COUNT - 1][1] > N: list[CPU_COUNT - 1][1] = N return list if __name__ == '__main__': N = 10 ** 6 # 多进程 time1 = time.clock() CPU_COUNT = cpu_count() ##CPU内核数 本机为8 pool = Pool(CPU_COUNT) sepList = seprateNum(N, CPU_COUNT) result = pool.map(GDBH, sepList) pool.close() pool.join() print('多线程耗时:%d s' % (time.clock() - time1)) # 单线程 time2 = time.clock() GDBH((4, N)) print('单线程耗时:%d s' % (time.clock() - time2))
相关文章推荐
- Python验证哥德巴赫猜想
- Python 正则表达式验证带分隔符的数字
- 用Supervisord管理Python进程
- 单进程select版-TCP服务器(python 版)
- Python 正则表达式验证浮点数
- Python 实现多进程复制文件
- python之线程、进程
- C 验证哥德巴赫猜想
- python进程变为守护者进程
- python 进程间的数据交互
- 编程语言的学习 ------ python3文件读取+登录简单验证(优化1)
- 运维学python之爬虫中级篇(三)分布式进程
- python 绑定进程在某个cpu上执行 affinity
- Python标准库09 当前进程信息 (os包)
- Python如何实现守护进程的方法示例
- 简明Python教程(四)———用户登录验证
- Python3 下分布式进程的简单应用
- 深入理解Python中的进程
- java程序验证哥德巴赫猜想
- Python进程 线程 协程