好吧,我有一个巨大的数字f
。实际上,这个数字只有100多位。我知道这些因素的大小差不多。
如果我的资源和时间有限,我应该使用哪种语言和算法?我包括在限制时间内对算法进行编码的时间长度。
思想?
编辑:有限,我的意思是在最短的时间内。
答案 0 :(得分:8)
最先进的素数因子分解算法是quadratic sieve及其变体。对于大于100位的数字,number sieve会变得更有效率。
它有一个开源实现here。它能够将一个100位数字分成两个大致相等的素数,只有4 hours on a 2.2 GHz AMD Althon。
所以有算法和示例实现。这可能足以为您提供想法或让您入门。
答案 1 :(得分:1)
对于云计算来说,这听起来像是一个很好的练习(也可能是一个罕见的好例子)。这应该很容易运行并行处理。在每个流程中划分您的因子池。
这样的事情可能会有所帮助:http://blog.controlgroup.com/2010/10/13/hadoop-and-amazon-elastic-mapreduce-analyzing-log-files/更多详情请见http://en.wikipedia.org/wiki/Apache_Hadoop#Hadoop_on_Amazon_EC2.2FS3_services。
(在过去一个月里,我观看了一个很好的视频演示,显示了类似于我在这里建议的东西 - 当然,现在我找不到链接。)
特别是如果您不需要以编程方式执行此操作,请查看http://www.alpertron.com.ar/ECM.HTM。 (与http://en.wikipedia.org/wiki/Quadratic_sieve相关联。)请特别注意第一个链接上“在多台机器中分配数字”下的注释。 (由于源代码可用,您可以使用Hadoop等以编程方式运行它。)
答案 2 :(得分:-2)
while (x < Number) {
if ((Number % x) == 0 ) {
cout << x << "*" << Number/x << endl;
++x;
}
else ++x;
}