为了解决问题中的一部分,其中给定n对整数x和y,我需要找出有多少不同的x/y。(精确值,带小数)
1.
当然,我可以遍历所有之前的对,看看之前是否出现了相同的x/y值,但我相信这需要(n^2)/2次。
我尝试使用哈希表,它似乎不能很好地处理浮点值。也许它会与一个非常好的散列函数一起工作。
2.
考虑到x和y是整数,我尝试了一种不同的方法来解决这个问题:
- 计算每对的最大公约数
- 将x和y与 GCD相除
使用矩阵 m[max_value_of_x][max_value_of_y] 并执行以下操作:
if ( m[x][y] ) { ; } else { m[x][y] = 1 ; cnt++ ; }
对所有对执行此操作后,cnt应该是不同浮点值的数量。
我认为,尽管这可以在相当长的时间内运行;它绝对不节省空间。实际上,在问题中, x和y的最大值为1000,但分配的内存非常低。