1  #define NG   0x100L
       2  
       3  unsigned long flg = 0;
       4  
       5  long sub (int n)
       6  {
       7    int a, b ;
       8  
       9    if (n >= 2)
      10      {
      11        if (n % 2 == 0)
      12  	{
      13  	  a = sub (n / 2);
      14  	  
      15  	  return (a + 2 * sub (n / 2 - 1)) * a;
      16  	}
      17        else
      18  	{
      19  	  a = sub (n / 2 + 1);
      20  	  b = sub (n / 2);
      21  	  
      22  	  return a * a + b * b;
      23  	}
      24      }
      25    else 
      26      return (long) n;
      27  }
      28  
      29  int main (void)
      30  {
      31    if (sub (30) != 832040L)
      32      flg |= NG;
      33  
      34    if (flg)
      35      abort ();
      36    
      37    exit (0);
      38  }