我有一项任务可以找到数字的所有主要因素...
我需要编写一个带数字的函数,并告诉我数字的所有主要因素。例如:
(我将函数传递给0到18446744073709551615范围内的数字 - 最大数字是适合64位无符号长整数的最大数。)
答案 0 :(得分:2)
这是一个难题,也是所有量子计算机研究的主要原因之一。看看Shor's Algorithm。没有优化的简单蛮力需要花费1000年的时间,尽管在这种特定情况下(64位整数),你应该能够将运行时间缩短到几分钟。
假设你有一个(最多)一个大的素因子的微不足道的情况,你可以通过做一些像从2计数和尝试每个数字(如果它工作多次; 12将是2,2,和3例如)。找到因子后,按该因子减少目标数量,并测试新目标是否为素数。
为了进一步加快速度,您可以跨多个线程进行处理,每个线程都负责一系列除数。您可以在一个或多个线程上运行素数测试器,为测试线程提供素数,因此您只是尝试除以素数。
你甚至可以从范围的顶部向下搜索,如果你认为提供该值的人试图变得很诡异,尽管低端的素数密度要高得多,这可能无济于事
要记住的主要事情是,除了X本身之外,X的最大可能因素是X的平方根。每次找到一个因子时,最大可能的剩余因子会显着减少。