python - 寻找主要因素的差异
问题描述
在使用 Pythonprimefac
模块时 - https://pypi.org/project/primefac/
我注意到这段代码有效:
import sys
import primefac
n = 600851475143
factors = list(primefac.primefac(n))
但这不会:
import sys
import primefac
n = 19087688894909892783503691960213776632781962588843842839953893606139157282825376128877238229887486797933180624979637419997128020864299273315243907454874577263432419226852240380380880131843664800828228959920799327101817796594944161768692639537839544009100224905464911818390882192901883104039350105285757995782376058970382205463192526628231366854662473466838863987148898819243940809068605863725041711337107340279029811816555169181781669826715177100102639379572663639848699896757952171115689208069972249342540932428107175784150214806633479073061672324629925288020557720111253896992657435200329511186117042808357973613389
factors = list(primefac.primefac(n))
导致以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\primefac.py", line 677, in primefac
f = multifactor(n, methods=methods, verbose=verbose)
File "C:\Python27\lib\site-packages\primefac.py", line 596, in multifactor
for p in procs: p.start()
File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "C:\Python27\lib\multiprocessing\forking.py", line 277, in __init__
dump(process_obj, to_child, HIGHEST_PROTOCOL)
File "C:\Python27\lib\multiprocessing\forking.py", line 199, in dump
ForkingPickler(file, protocol).dump(obj)
File "C:\Python27\lib\pickle.py", line 224, in dump
self.save(obj)
File "C:\Python27\lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "C:\Python27\lib\pickle.py", line 425, in save_reduce
save(state)
File "C:\Python27\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python27\lib\pickle.py", line 655, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\Python27\lib\pickle.py", line 687, in _batch_setitems
save(v)
File "C:\Python27\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python27\lib\pickle.py", line 754, in save_global
(obj, module, name))
pickle.PicklingError: Can't pickle <function factory at 0x00000000032520B8>: it's not found as primefac.factory
type(n)Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\lib\multiprocessing\forking.py", line 381, in main
self = load(from_parent)
File "C:\Python27\lib\pickle.py", line 1384, in load
return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 864, in load
dispatch[key](self)
File "C:\Python27\lib\pickle.py", line 886, in load_eof
raise EOFError
EOFError
有谁知道为什么会这样?
在这两种情况下type(n)
返回<type 'long'>
解决方案
这是我的两分钱:
- 如果您还没有,请尝试导入gmpy2 。
从您链接到的项目页面:
GNU 的因数命令不会因数大于 2^127-1
大约是 1.7 * 10^38,比你被“倾倒”的那个数字要小得多。因此,可能(我在这里推测)该软件包存在限制,并且报告它在某些操作系统(MacOS,截至目前)上工作的人也遇到了一些“转储”错误,这是使用处理的CPython 级别的操作系统,带有一些“垃圾”内存值,导致他们相信这是有效的。
推荐阅读
- python - 多处理支持的并行循环不能嵌套在线程警告和问题之下
- angular - NGXS。调度操作后如何测试服务方法(toHaveBeenCalled)
- github - 在自述文件页面上添加图像
- javascript - 什么真正决定了 JavaScript 模块在 .html 中的执行顺序?
- mysql - 使用临时表优化 MySQL 查询
- python - 如何在使用while循环时将值附加到字典中的列表?
- python - 从python中的像素数据保存图像
- vue.js - VueJS 多个下拉菜单 - 渲染选项取决于第一个选择的值
- reactjs - React-Beautiful-Dnd 找不到带有 Id 的可拖动元素
- node.js - 尽管在查询数组时存在 MongoDB 查询,但它没有返回文档