#define NG 0x100L unsigned long flg = 0; long sub (int n) { int a, b ; if (n >= 2) { if (n % 2 == 0) { a = sub (n / 2); return (a + 2 * sub (n / 2 - 1)) * a; } else { a = sub (n / 2 + 1); b = sub (n / 2); return a * a + b * b; } } else return (long) n; } int main (void) { if (sub (30) != 832040L) flg |= NG; if (flg) abort (); exit (0); }