在1到1 * 10 ^ 18个对象之间的大范围内快速迭代

时间:2014-04-26 16:55:25

标签: c# algorithm

我有一个long类型指定的范围,可以从1和1 * 10 ^ 18(包括1和1 * 10 ^ 18)一样大,对于这个范围之间的每个值,我做一个可除性检查。我测试了一个for循环,看看这样的迭代需要多长时间(没有操作只是循环)。我发现的答案太长了。我不熟悉另一种优雅地做到这一点的方法。任何人都可以分享一些想法

任务:

可能的例子; 从N = 1到N = 1 * 10 ^ 18,如果N可被X整除则做某事。返回可被X整除的N个值的数量

约束,< = 2秒的结果

2 个答案:

答案 0 :(得分:2)

您不需要遍历范围并检查可分性,因为[1,10^18]X可以被i * X整除的唯一数字是i,其中1的范围是10^18 / X {1}}到10^18 / X并且确实有X个这样的数字。如果{{1}}很小,这可能仍然是很多的数字。

答案 1 :(得分:-1)

呀。学习GPU编程。你需要尽可能多的核心,然后需要很多时间。

1 * 10 ^ 18方将花费大量时间。认真的很长时间。没办法神奇地绕过它。

一组具有适当编程功能的高端显卡可以提供帮助 - 它们不是超级快,但它们每个都有数千个内核.....并且正是为此而制造的。