В серии натуральных чисел мы должны удалить каждый 2-й элемент в 1-м проходе. Затем в оставшихся элементах удалите каждый третий элемент во втором проходе. Затем на K-м проходе удалите каждый (k+1)-й элемент из оставшихся элементов.
Сериал будет таким
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, ...
После 1-го прохода (после удаления каждого 2-го элемента),
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, ...
После 2-го прохода (после удаления каждого 3-го элемента)
1, 3, 7, 9, 13, 15, 19, 21, 25, 27, ...
После 3-го прохода (после удаления каждого 4-го элемента)
1, 3, 13, 15, 19, 25, 27, ...
Итак, после прохождения бесконечности он станет
1, 3, 7, 13, 19, 27, 39, 49, 63, 79, ...
Этот ряд также называют ситом Флавия-Иосифа.
Решение для этого, чтобы найти 6-й элемент в ряду:
- do 6^2 = 36
- перейти к кратному 5, что дает 35
- затем до кратного 4 = 32
- затем до кратного 3 = 30
- затем до кратного 2 = 28
- затем до кратного 1 = 27
- и так 6-е счастливое число 27.
Хотя это работает, я не понимаю, как работает решение?
Программа C для этого,
int calc(int n)
{
if (n == 1) return 1;
return calc_rec(n*n, n-1);
}
int calc_rec(int nu, int level)
{
int tmp;
if (level == 1) return (nu-1);
tmp = nu % level;
return calc_rec(nu - (tmp ? tmp : level), level-1);
}
Ссылка, объясняющая это http://oeis.org/A000960