1 #define NG   0x100L
2 
3 unsigned long flg = 0;
4 
sub(int n)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 
main(void)29 int main (void)
30 {
31   if (sub (30) != 832040L)
32     flg |= NG;
33 
34   if (flg)
35     abort ();
36 
37   exit (0);
38 }
39