#include #include #include template size_t count_factors(T n) { size_t count{}; T c = 2; while(n > 1) { if(n % c == 0) { n /= c; count++; } else c++; } return count; } template void prime_order(std::vector &vec) { std::sort(vec.begin(),vec.end(),[&](T a, T b){ size_t fa = count_factors(a); size_t fb = count_factors(b); return fa == fb ? a < b : fa < fb; }); } template std::ostream &operator<<(std::ostream &os, const std::vector& vec) { for(const auto &e : vec) os << e << ' '; os << "\n"; return os; } int main() { std::vector vec{11,8,27,4}; prime_order(vec); std::cout << vec; return 0; }