繁体   English   中英

C / C ++中所有大数的因素

[英]All factors of big numbers in C/C++

我试图找出数量级为10 ^ 18的所有因素...但是存在时间限制,这会造成问题。 我所做的是使用Eratosthenes筛子查找因素,然后存储因素,但速度很慢.......

如果空间不成问题,则可以存储最多10 ^ 9的质数列表(可以下载列表),并使用它来分解最多10 ^ 18的任何质数。 您还可以使用分解算法(如Polard's Rho或其他 )。

我真的建议阅读有关此整数分解的Wiki文章: http : //en.wikipedia.org/wiki/Integer_factorization

通用分解方法很慢。 但是,可以尝试使用一些特殊用途的方法。

将素数p <= 10 ^ 9的列表存储为因数N <= 10 ^ 18的想法的问题是,对于任何特定的N,您仍然需要遍历素数p <= sqrt(N)并检查N%p == 0。 这不是开展业务的最快方法。

从您的问题尚不清楚,您是否要分解一堆10 ^ 18阶的数字,或者是否要分解所有 N <= 10 ^ 18的数字。 第一种情况是可行的,具体取决于您要考虑多少N和需要多快。 第二种情况,将所有数字N <= 10 ^ 18分解,是不可行的,因为这将需要进行10 ^ 18次以上的操作(每个要分解的数字至少一个)。 考虑到计算机每秒可以执行10 ^ 9次操作,并且一年中大约需要10 ^ 7秒,因此您需要考虑很长的时间。

如果只想将一堆数字N分解为10 ^ 18的数量,那么有很多方法可以做到这一点。 “最佳”方式取决于特定数字的属性。 例如,大约10 ^ 18的随机整数比两个素数均为10 ^ 9的乘积的整数更容易平均分解,因为在移至更复杂的算法之前,可以通过试验除法消除较小的因子。 与编程问题相比,这更多是计算数论问题。 如果这是您的问题,我建议将其推荐到mersenneforum.org保理部分

如果您想要一个又快又脏又慢的解决方案,那么就不要重新发明轮子了。 尝试使用例如GMP-ECM或查看PARI / GP是否可以解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM