#include <list>
#include <iostream>
using namespace std;
class Num
{
public:
Num(int n = 0):n(n)
{
d = 0;
// метод ужасный, но вопрос не в нем...
for (int i = 1; i < n; i++)
if (n % i == 0) ++d;
}
int value() const { return n; }
int dividers() const { return d; }
private:
int n, d;
};
bool lessD(const Num& a, const Num& b)
{
return a.dividers() < b.dividers();
}
int main(int argc, const char * argv[])
{
list<Num> l;
for(int i = 0; i < 20; ++i)
l.push_back(20+rand()%200);
for(auto x: l) cout << x.value() << " ";
cout << endl;
l.sort(lessD);
for(auto x: l) cout << x.value() << "(" << x.dividers() <<") ";
cout << endl;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBOdW0KewpwdWJsaWM6CiAgICBOdW0oaW50IG4gPSAwKTpuKG4pCiAgICB7CiAgICAgICAgZCA9IDA7CiAgICAgICAgLy8g0LzQtdGC0L7QtCDRg9C20LDRgdC90YvQuSwg0L3QviDQstC+0L/RgNC+0YEg0L3QtSDQsiDQvdC10LwuLi4KICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykKICAgICAgICAgICAgaWYgKG4gJSBpID09IDApICsrZDsKICAgIH0KICAgIGludCB2YWx1ZSgpICAgIGNvbnN0IHsgcmV0dXJuIG47IH0KICAgIGludCBkaXZpZGVycygpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KcHJpdmF0ZToKICAgIGludCBuLCBkOwp9OwoKYm9vbCBsZXNzRChjb25zdCBOdW0mIGEsIGNvbnN0IE51bSYgYikKewogICAgcmV0dXJuIGEuZGl2aWRlcnMoKSA8IGIuZGl2aWRlcnMoKTsKfQoKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBsaXN0PE51bT4gbDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAyMDsgKytpKQogICAgICAgIGwucHVzaF9iYWNrKDIwK3JhbmQoKSUyMDApOwoKICAgIGZvcihhdXRvIHg6IGwpIGNvdXQgPDwgeC52YWx1ZSgpIDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKCiAgICBsLnNvcnQobGVzc0QpOwoKICAgIGZvcihhdXRvIHg6IGwpIGNvdXQgPDwgeC52YWx1ZSgpIDw8ICIoIiA8PCB4LmRpdmlkZXJzKCkgPDwiKSAiOwogICAgY291dCA8PCBlbmRsOwoKfQo=