任务是找到一个复合数的重要因素。
在不超过140字节长的情况下,编写代码以尽可能快地找到复合数字的重要因素。输出应该只是您找到的因素。
您的代码可以采用任何方便的方式进行输入和输出,包括例如作为函数的参数。
列出所有因素的测试用例(您只需要输出一个)
187: 11 17
1679: 23 73
14369648346682547857: 1500450271 9576890767
34747575467581863011: 3628273133 9576890767
52634041113150420921061348357: 2860486313 5463458053 3367900313
82312263010898855308580978867: 264575131106459 311111111111113
205255454905325730631914319249: 2860486313 71755440315342536873
1233457775854251160763811229216063007: 1110111110111 1000000000063 1111111999999
1751952685614616185916001760791655006749: 36413321723440003717 48112959837082048697
在以下困难的测试案例中,我不会给您打分,这可能是您感兴趣的测试:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
得分了
您的分数是将以上所有测试用例分解的总时间,每个分解失败的惩罚为10分钟(均四舍五入到最接近的秒数)。您的代码也应该适用于其他整数,这不应该只是硬编码这些答案。
10分钟后,我将停止您的代码。
如果两个人获得相同的分数,则第一个答案将获胜。
限制条件
您的代码不能使用任何执行整数分解的内置函数或库函数。您可以假设输入少于256位。所有输入数字将是复合的。
我将如何计时?
我实际上将time ./myprog
在Ubuntu系统上运行以进行计时,因此也请提供一个完整的程序供我运行,其中包括您定义的任何功能。
编译语言说明
在我的机器上,编译时间不得超过1分钟。
真的有可能吗?
如果您忽略空间限制,则可以在我的计算机上使用纯Python代码+ pypy在不到2秒的时间内分解每个因素。
那么什么是非平凡的因子分解算法?
Pollard的rho算法快速且适合打高尔夫球。当然,还有许多其他方法可以分解整数。
更快的是二次筛。将其压缩为140个字节似乎是一个严峻的挑战。
领先分数
- SEJPM,最后一个测试用例将受到 10分钟的处罚,而Haskell中则需要 16秒
2
还是2, 2
?
2 ** 1024
?