Python 寻找素因子的差异

Python 寻找素因子的差异,python,prime-factoring,Python,Prime Factoring,使用Pythonprimefac模块时- 我注意到这段代码是有效的: import sys import primefac n = 600851475143 factors = list(primefac.primefac(n)) 但这并不是: import sys import primefac n = 19087688894909892783503691960213776632781962588843842839953893606139157282825376128877238229887

使用Python
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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
primefac中第677行的文件“C:\Python27\lib\site packages\primefac.py”
f=多因素(n,方法=方法,详细=详细)
文件“C:\Python27\lib\site packages\primefac.py”,第596行,在multifactor中
对于进程中的p:p.start()
文件“C:\Python27\lib\multiprocessing\process.py”,第130行,在开始处
self.\u popen=popen(self)
文件“C:\Python27\lib\multiprocessing\forking.py”,第277行,在\uuu init中__
转储(进程对象、到子进程、最高\u协议)
文件“C:\Python27\lib\multiprocessing\forking.py”,第199行,在转储中
ForkingPickler(文件、协议).dump(obj)
文件“C:\Python27\lib\pickle.py”,第224行,位于转储文件中
自我保存(obj)
文件“C:\Python27\lib\pickle.py”,第331行,保存
自我保存(obj=obj,*rv)
文件“C:\Python27\lib\pickle.py”,第425行,在save\u reduce中
保存(状态)
文件“C:\Python27\lib\pickle.py”,第286行,保存
f(self,obj)#用显式self调用未绑定方法
保存目录中第655行的文件“C:\Python27\lib\pickle.py”
self.\u batch\u setitems(obj.iteritems())
文件“C:\Python27\lib\pickle.py”,第687行,在批处理设置项中
保存(v)
文件“C:\Python27\lib\pickle.py”,第286行,保存
f(self,obj)#用显式self调用未绑定方法
文件“C:\Python27\lib\pickle.py”,第754行,在save\u global中
(对象、模块、名称))
pickle.PicklingError:无法pickle:找不到primefac.factory
类型(n)回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\lib\multiprocessing\forking.py”,第381行,在main中
self=加载(从父级)
加载文件“C:\Python27\lib\pickle.py”,第1384行
返回Unpickler(file.load())
加载文件“C:\Python27\lib\pickle.py”,第864行
调度[键](自身)
文件“C:\Python27\lib\pickle.py”,第886行,在load\u eof中
提高采收率
伊奥费罗
有人知道为什么会这样吗

在这两种情况下,type(n)返回

这是我的两分钱:

  • 如果您还没有,请尝试导入
  • 从链接到的项目页面:

    GNU的factor命令不会对大于2^127-1的任何内容进行因子计算

    大约是1.7*10^38,比你现在的数字要小得多 被“甩”在地上。 因此,可能(我在这里猜测)该方案存在局限性 而那些报道的人 在某些操作系统(MacOS,目前为止)上工作的it也会得到一些“转储” 错误,使用CPython级别的操作系统处理,带有一些“垃圾”内存 价值观,使他们相信这是可行的


功能
工厂
在primefac.py中的另一个功能
多因素
中定义

pickle.PicklingError:无法在工厂对函数进行pickle 0x00000000032520B8:找不到它作为primefac.factory

Pickle仅在顶级函数上工作


如果将此函数移到顶层,即从primefac.py中的multifactor中移出,则此错误将消失

我相信,在这两种情况下,
n
都有正确的类型,但是库中使用的类型呢?随机猜测:将活动代码(导入后)放置在
中,如果uuuuuu name_uuuu==“uuuuuu main”:
块中。Windows在多处理方面有一些问题。@MichaelButscher未发生任何更改在MacOs上运行未引发异常。我相信这与Windows有关。谢谢你的聪明观察。我已经启动了脚本,到目前为止还没有收到任何错误,但机器仍在计算。一旦我在控制台上看到因子输出,我就会接受你们的答案。顺便问一下:您是否设法让脚本完成其工作,并查看输出是否正确?我的机器仍在计算。机器仍在计算,不会返回。。。我还在等我的系统被挂了。进程消耗了所有内存。所以,我放弃了。我只是强迫进程退出,因为我的系统也挂起了。但为了确保你的答案是正确的并接受它,必须实现适当的功能,并且proved@Lossofhumanidentity我没有试过你的代码,但你试过一个更容易计算的数字吗?它可能仍然是一个巨大的数字,但有许多非常小的素因子。