【发布时间】:2014-09-08 12:52:41
【问题描述】:
有一个 n
它可以在 O(n^2 log n) 中轻松完成,但这显然是一种缓慢的方式,因为限制表明更接近 O(n log n)。可以快速完成的一件事是分解出所有数字,并在每个数字中排除多次出现的相同素数,但这并不会带来任何显着的改进。我还想计算相反的对数 - 具有公约数的对。可以分组进行 - 首先计算最小公约数为 2 的所有对,然后计算 3、5 等,但在我看来,这就像另一个死胡同。
【问题讨论】:
-
哪个限制表明 O(n log n)?
-
给定整数的个数,也就是n,最多可以是10^6。希望程序最多运行几秒钟,这表明 O(n log n) - 甚至可能是 O(n),但它非常乐观。
-
所以是一个愿望.. ..我以为你已经从理论上知道这可以在 O(n log n) 中完成。在我看来,在最坏的情况下,通常计算互质数最多只能是 O(n^2),因为可能存在它们都是互质数的集合,因此您需要测试所有对。也许只能针对一般情况考虑一些事情。
-
是的,答案是 O(n^2),但是一个排列中的反转次数也是如此,并且仍然可以计算 O(n log n) 中的所有反转,只需计数他们分组。
-
@Cris 什么是“排列中的反转”? “按组计数”是什么意思?