← 完整题目索引

PROJECT EULER · #0165

交点

Intersections

仅题目 · 已解决原题 ↗

线段由其两个端点唯一定义。
通过考虑平面几何中的两条线段,存在三种可能性:
这些线段有零个点、一个点或无数个共同点。

此外,当两个线段恰好有一个公共点时,该公共点可能是其中一个线段或两个线段的端点。如果两个线段的公共点不是任一线段的端点,则它是两个线段的内点。
如果 TL1L2 的唯一公共点,并且 T 是两个线段的内部点,我们将两个线段 L1L2 的公共点 T 称为 L1L2 的真正交点。

考虑三个段 L1L2L3

  • L1(27,44)(12,32)
  • L2(46,53)(17,62)
  • L3(46,70)(22,40)

可以验证线段L2L3有真正的交点。我们注意到,由于 L3 的端点之一:(22,40) 位于 L1 上,因此这不被认为是真正的交点。 L1L2没有共同点。这样,在这三个线段中,我们找到了一个真正的交点。

现在让我们对 5000 线段执行相同的操作。为此,我们使用所谓的"Blum Blum Shub"伪随机数生成器生成 20000 数。

s0=290797sn+1=sn×sn(mod50515093)tn=sn(mod500)

为了创建每个线段,我们使用四个连续的数字 tn。也就是说,第一条线段由下式给出:

(t1,t2)(t3,t4)

根据上述生成器计算的前四个数字应为:2714412232。因此,第一段将是 (27,144)(12,232)

5000 线段中找到多少个不同的真实交点?

题解待补充

这道题的题目已收录,解题思路、代码和答案将在后续补充。