#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
uint64_t isqrt( uint64_t const n )
{
double x = n >> (__builtin_clzll(n)/2); // x ist höchstens 2^32
double old_x;
for(;;)
{
old_x = x;
x = (x + n/x)/2;
if( std::abs(x - old_x) < 1 )
break;
}
return x;
}
int main()
{
for ( uint64_t i = 2; i < 3000000; ++i )
{
if ( ( i & ( i - 1 ) ) == 0 )
cout << i << '\n';
uint64_t square = i * i;
if ( isqrt( square - 1 ) != i - 1 )
cout << "error: " << i << " ^2 - 1\n";
if ( isqrt( square ) != i )
cout << "error: " << i << " ^2\n";
if ( isqrt( square + 1 ) != i )
cout << "error: " << i << " ^2 + 1\n";
}
}
I2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdWludDY0X3QgaXNxcnQoIHVpbnQ2NF90IGNvbnN0IG4gKQp7CiAgICBkb3VibGUgeCA9IG4gPj4gKF9fYnVpbHRpbl9jbHpsbChuKS8yKTsgLy8geCBpc3QgaMO2Y2hzdGVucyAyXjMyCiAgICBkb3VibGUgb2xkX3g7CiAgICBmb3IoOzspCiAgICB7CiAgICAgICAgb2xkX3ggPSB4OwogICAgICAgIHggPSAoeCArIG4veCkvMjsKIAogICAgICAgIGlmKCBzdGQ6OmFicyh4IC0gb2xkX3gpIDwgMSApCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogCiAgICByZXR1cm4geDsKfQogCmludCBtYWluKCkKewogICAgZm9yICggdWludDY0X3QgaSA9IDI7IGkgPCAzMDAwMDAwOyArK2kgKQogICAgewogICAgICAgIGlmICggKCBpICYgKCBpIC0gMSApICkgPT0gMCApCiAgICAgICAgICAgIGNvdXQgPDwgaSA8PCAnXG4nOwogICAgICAgIHVpbnQ2NF90IHNxdWFyZSA9IGkgKiBpOwogICAgICAgIGlmICggaXNxcnQoIHNxdWFyZSAtIDEgKSAhPSBpIC0gMSApCiAgICAgICAgICAgIGNvdXQgPDwgImVycm9yOiAiIDw8IGkgPDwgIiBeMiAtIDFcbiI7CiAgICAgICAgaWYgKCBpc3FydCggc3F1YXJlICkgIT0gaSApCiAgICAgICAgICAgIGNvdXQgPDwgImVycm9yOiAiIDw8IGkgPDwgIiBeMlxuIjsKICAgICAgICBpZiAoIGlzcXJ0KCBzcXVhcmUgKyAxICkgIT0gaSApCiAgICAgICAgICAgIGNvdXQgPDwgImVycm9yOiAiIDw8IGkgPDwgIiBeMiArIDFcbiI7CiAgICB9Cn0=