#include <iostream>
struct elem
{
int val;
bool prime;
elem * next;
elem(int v, bool p, elem * n) : val(v), next(n), prime(p) {}
};
class Kolechko
{
public:
Kolechko(int size)
{
first = new elem(2, true, NULL);
first->next = first;
elem * prev = first;
elem * t;
for (int i = 0; i < size - 1; i++)
{
t = new elem(prev->val + 1, true, first);
prev->next = t;
prev = t;
}
}
void show()
{
elem * t = first;
while(t->next != first)
{
if (t->prime)
{
std::cout << t->val << std::endl;
}
t = t->next;
}
}
void calc(int step = 2)
{
int count = step - 1;
elem * t = first;
for (int i = 0; i < count; i++)
{
t = t->next;
}
elem * s = t;
while(t->next != first)
{
if (count < 1)
{
count = step - 1;
t->prime = false;
t = t->next;
}
else
{
t = t->next;
count--;
}
}
if (s->next != first)
calc(s->val);
}
private:
elem * first;
};
int main()
{
Kolechko * kolco = new Kolechko(100);
kolco->calc();
kolco->show();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGVsZW0KewoJaW50IHZhbDsKCWJvb2wgcHJpbWU7CgllbGVtICogbmV4dDsKCWVsZW0oaW50IHYsIGJvb2wgcCwgZWxlbSAqIG4pIDogdmFsKHYpLCBuZXh0KG4pLCBwcmltZShwKSB7fQp9OwoKY2xhc3MgS29sZWNoa28KewpwdWJsaWM6CglLb2xlY2hrbyhpbnQgc2l6ZSkKCXsKCQlmaXJzdCA9IG5ldyBlbGVtKDIsIHRydWUsIE5VTEwpOwoJCWZpcnN0LT5uZXh0ID0gZmlyc3Q7CgkJZWxlbSAqIHByZXYgPSBmaXJzdDsKCQllbGVtICogdDsKCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspCgkJewoJCQl0ID0gbmV3IGVsZW0ocHJldi0+dmFsICsgMSwgdHJ1ZSwgZmlyc3QpOwoJCQlwcmV2LT5uZXh0ID0gdDsKCQkJcHJldiA9IHQ7CgkJfQoJfQoKCXZvaWQgc2hvdygpCgl7CgkJZWxlbSAqIHQgPSBmaXJzdDsKCQl3aGlsZSh0LT5uZXh0ICE9IGZpcnN0KQoJCXsKCQkJaWYgKHQtPnByaW1lKQoJCQl7CgkJCQlzdGQ6OmNvdXQgPDwgdC0+dmFsIDw8IHN0ZDo6ZW5kbDsKCQkJfQoJCQl0ID0gdC0+bmV4dDsKCQl9Cgl9CgoJdm9pZCBjYWxjKGludCBzdGVwID0gMikKCXsKCQlpbnQgY291bnQgPSBzdGVwIC0gMTsKCQllbGVtICogdCA9IGZpcnN0OwoJCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKCQl7CgkJCXQgPSB0LT5uZXh0OwoJCX0KCQllbGVtICogcyA9IHQ7CgkJd2hpbGUodC0+bmV4dCAhPSBmaXJzdCkKCQl7CgkJCWlmIChjb3VudCA8IDEpCgkJCXsKCQkJCWNvdW50ID0gc3RlcCAtIDE7CgkJCQl0LT5wcmltZSA9IGZhbHNlOwoJCQkJdCA9IHQtPm5leHQ7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl0ID0gdC0+bmV4dDsKCQkJCWNvdW50LS07CgkJCX0KCQl9CgkJaWYgKHMtPm5leHQgIT0gZmlyc3QpCgkJCWNhbGMocy0+dmFsKTsKCX0KCnByaXZhdGU6CgllbGVtICogZmlyc3Q7Cn07CgppbnQgbWFpbigpCnsKCUtvbGVjaGtvICoga29sY28gPSBuZXcgS29sZWNoa28oMTAwKTsKCWtvbGNvLT5jYWxjKCk7Cglrb2xjby0+c2hvdygpOwoJcmV0dXJuIDA7Cn0=