IOM 2018, Блиц, руски — Задача 31

ОЛИМПИАДА МЕГАПОЛИСОВ. Москва, 3 сентября 2018

Условие

Определите вывод следующей программы:

Листинг программы на C++ из 26 пронумерованных строк: глобальные int k = 0 и vector of bool t(17, true); рекурсивная функция bool f(int l, int r) увеличивает k, при l == r возвращает t[l], иначе делит отрезок пополам по mid = (l + r) / 2 и возвращает f(l, mid) || f(mid + 1, r), если (int)log2(r - l + 1) % 2 == 1, и f(l, mid) && f(mid + 1, r) в противном случае; main задает t[1] = false, отсеивает составные числа меньше 17 решетом, вызывает f(1, 16) и выводит k.

Решение

Внимание: Непълно решение

В архива няма официално решение на тази задача.


Оригинал в Архива: blitz-ru.pdf