#include #include template T hailstone(typename T::value_type n) { T seq; for (seq << n; n != 1; seq << n) { n = (n&1) ? (3*n)+1 : n/2; } return seq; } template T longest_hailstone_seq(typename T::value_type n) { T maxSeq; for (; n > 0; --n) { const auto seq = hailstone(n); if (seq.size() > maxSeq.size()) { maxSeq = seq; } } return maxSeq; } int main(int, char *[]) { const auto seq = hailstone>(27); qInfo() << "hailstone(27):"; qInfo() << " length:" << seq.size() << "elements"; qInfo() << " first 4 elements:" << seq.mid(0,4); qInfo() << " last 4 elements:" << seq.mid(seq.size()-4); const auto max = longest_hailstone_seq>(100000); qInfo() << "longest sequence with starting element under 100000:"; qInfo() << " length:" << max.size() << "elements"; qInfo() << " starting element:" << max.first(); }