在自然数列中,我们必须删除第1遍中的每个第2个元素。然后在剩下的元素中,删除第二遍中的每个第三个元素。然后在第K次通过时,从剩余的元素中移除每个(k + 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, ...
一号通后(除每2元后),
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, ...
第二遍后,(去掉每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元素:
- 做6^2 = 36
- 再往5的倍数给予35
- 然后向下到多4 = 32
- 然后下降到3 = 30
- 然后倍数下降到2 = 28
- 然后倍数下降到1 = 27 的倍数
- 等第六幸运数字是27
虽然它的工作原理,我不理解的解决方案是如何工作的?
这个交流计划是,
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
您可能会在http://math.stackexchange.com上询问这个问题 – Shahbaz
我做到了。 http://math.stackexchange.com/questions/143876/remove-every-k1-th-remaining-element-in-kth-pass-of-natural-numbers – viji