Вот несколько записей загруженной телефонной системы с миллионом пользователей:
№ | Caller | Called |
1 | 200007 | 100053 |
2 | 600183 | 500439 |
3 | 600863 | 701497 |
... | ... | ... |
В строке № n телефонный номер звонящего и вызываемый номер являются Caller(n) = S2n-1 и Called(n) = S2n соответственно, где S1,2,3,... образуются "Генератором Фибоначчи с задержкой":
При 1 ≤ k ≤ 55, Sk = [100003 - 200003k + 300007k3] (modulo 1000000)
При 56 ≤ k, Sk = [Sk-24 + Sk-55] (modulo 1000000)
Если Caller(n) = Called(n), то предполагается, что пользователь ошибся в наборе номера, и вызов не происходит. В противном случае вызов происходит успешно.
Оговорим, что начиная с первой строки, любая пара пользователей X и Y - друзья, если X звонит Y или наоборот. Аналогично, X будет другом друга Z, если X является другом Y, который, в свою очередь является другом Z; и так далее, с образованием более длинных цепочек.
Номер премьер-министра 524287. После скольких удачных звонков, не считая неправильный набор, 99% пользователей (включая самого премьер-министра), окажутся друзьями премьер-министра, друзьями его друзей и т.д.?