---
id: 5900f4111000cf542c50ff24
title: 'Задача 165: Перетини'
challengeType: 1
forumTopicId: 301799
dashedName: problem-165-intersections
---

# --description--

Сегмент визначається лише двома кінцевими точками. Розглядаючи два відрізки лінії у планіметрії є три можливості: сегменти мають нуль точок, одну точку або нескінченно багато спільних точок.

Крім того, коли два відрізки мають лише одну спільну точку, це може бути той випадок, коли спільною точкою є кінцева точка або одного з окремих сегментів, або обох. Якщо спільна точка двох сегментів не є кінцевою точкою будь-якого із сегментів, то це внутрішня точка обох сегментів.

Ми назвемо спільну точку $T$ двох відрізків $L_1$ і $L_2$ справжньою точкою перетину $L_1$ і $L_2$, якщо $T$ є єдиною спільною точкою $L_1$ і $L_2$ і $T$ є внутрішньою точкою обох відрізків.

Розглянемо три сегменти $L_1$, $L_2$та $L_3$:

$\begin{align}   & L_1: (27, 44) \\;\text{to}\\; (12, 32) \\\\
  & L_2: (46, 53) \\;\tтекст{to}\\; (17, 62) \\\\   & L_3: (46, 70) \\;\tтекст{to}\\; (22, 40) \\\\
\end{align}$$

Можна перевірити, що відрізки ліній $L_2$ і $L_3$ мають справжню точку перетину. Ми зазначали, що, якщо одна з кінцевих точок $L_3$: (22, 40) лежить на $L_1$, це не вважається справжньою точкою перетину. $L_1$ і $L_2$ не мають спільної точки. Отже, на трьох відрізках прямої ми знаходимо одну справжню точку перетину.

Тепер зробімо те саме для 5000 прямих відрізків. З цією метою ми згенеруємо 20000 чисел, використовуючи так званий генератор псевдо-випадкових чисел «Blum Blum Shub».

$\begin{align}   & s_0 = 290797 \\\\
  & s_{n + 1} = s_n × s_n (\text{modulo}\\; 50515093) \\\\   & t_n = s_n (\text{modulo}\\; 500) \\\\
\end{align}$

Щоб створити кожен відрізок, ми використовуємо чотири послідовних числа $t_n$. Тобто перший відрізок дано:

($_t$1, $t_2$) до ($t_3$, $t_4$)

Перші чотири числа вичислені згідно зі згаданим генератором, мають бути: 27, 144, 12 та 232. Перший відрізок, таким чином, буде (27, 144) до (12, 232).

Скільки окремих точок перетину буде знайдено серед 5000 відрізків прямих ліній?

# --hints--

`distinctIntersections()` має повертати `2868868`.

```js
assert.strictEqual(distinctIntersections(), 2868868);
```

# --seed--

## --seed-contents--

```js
function distinctIntersections() {

  return true;
}

distinctIntersections();
```

# --solutions--

```js
// solution required
```
