我试图在一个非常大的虚拟网格中找到某些感兴趣的坐标。这个网格实际上并不存在于内存中,因为尺寸很大。为了这个问题,让我们假设这些维度是(Width x Height) = (Int32.MaxValue x Int32.MaxValue)
。
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
关于网格的已知数据:
- 网格尺寸 =
(Int32.MaxValue x Int32.MaxValue)
. - 任何给定
(x, y)
坐标处的值 = X 和 Y 的乘积 =(x * y)
。
鉴于上述大量有限数,我需要计算一组坐标,其值为(x * y)
的幂e
。假设e
在这种情况下是 2。
由于循环遍历网格不是一种选择,我考虑过循环遍历:
int n = 0;
long r = 0;
List<long> powers = new List<long>();
while (r < (Int32.MaxValue * Int32.MaxValue))
{
r = Math.Pow(e, n++);
powers.Add(r);
}
这给了我们一套独特的权力。我现在需要找出每种力量存在的坐标。让我们来吧2^3=8
。如上图所示,8 存在于 4 个坐标中:(8,1), (4,2), (2,4) & (1, 8)
.
显然,这里的问题是找到数字 8 的多个因数,但这对于更大的数字将变得不切实际。有没有另一种方法来实现这一点,我错过了什么?
- 使用集合是行不通的,因为这些因素不存在于内存中。
- 是否有一种创造性的方法来考虑所讨论的数字将始终是 的幂
e
?