Problem14

#include <iostream>
using namespace std;

#define NUM 1000000

int
main(int argc, char **argv)
{
    bool t[NUM];
    memset(t, true, NUM);

    int ans = -1;
    int max = -1;
    for (int i = 2; i < NUM; i++)
    {
        if (t[i] == false)
        {
            continue;
        }
  
        unsigned int n = i;
        int l = 1;

        while(n != 1)
        {
            if (n%2 == 0)
            {
                n /= 2;
            }
            else
            {
                n = 3*n + 1;
            }
            l++;
            if (n < NUM)
            {                
                t[n] = false;
            }
        }

        int j;
        for (j = i; j < NUM && false; j*=2)
        {
            t[j] = false;
            l++;
        }
        l--;

        if (max < l)
        {
            max = l;
            ans = j;
        }
    }

    cout << ans << endl;

    return 0;
}