【发布时间】:2016-06-30 12:47:46
【问题描述】:
我正在编写一个解决十次方总和问题的程序,我需要一个快速算法来找到n^10 以及n^(1/10) 自然n<1 000 000。我正在预先计算一个幂数组,所以 n^10(数组查找)需要 O(1)。对于n^(1/10),我正在进行二分搜索。有没有什么办法可以加速根的提取?例如,如果索引是完美的幂,则创建一个数组并使用相应的根填充元素,否则将给出 O(1),但我会用完内存。有没有办法让根提取比 O(log(n)) 更快?
【问题讨论】:
-
你只需要
n^(1/10)的整数部分吗?如果不是,您可以使用愚蠢的 (exp(b*ln(a)) 公式而不是预先计算,并且可能会缓存输出。此外,如果您可以快速 log() 您的 n,您将只需要检查相邻的潜力对数根,如果您几乎可以查明潜在的根,则不需要二进制搜索与整个数组。 -
只有 4 个 10 次方小于 100 万:0、1、1024 和 59049,因此发现特定 n 是否是 10 次方应该只是测试它是否是其中之一的问题数字。也许我理解错了。
-
我不需要小数部分,我正在求解一个自然数方程。我有一百万个数字要检查,所以最大的数字将有一个后跟 6*10=60 个零。预计算将加快搜索速度。
-
@paul-hankin 最大的数字是 1000000^10,而不是 3^10。
标签: java algorithm math optimization