A289236 Square array a(p,q) read by antidiagonals: a(p,q) = the number of line segments that constitute the trajectory of a billiard ball on a pool table with dimensions p X q, before the ball reaches a corner.
1, 2, 2, 3, 1, 3, 4, 4, 4, 4, 5, 2, 1, 2, 5, 6, 6, 6, 6, 6, 6, 7, 3, 7, 1, 7, 3, 7, 8, 8, 2, 8, 8, 2, 8, 8, 9, 4, 9, 4, 1, 4, 9, 4, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 5, 3, 2, 11, 1, 11, 2, 3, 5, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12
Offset: 1
Examples
In a square-shaped pool table, the ball just crosses diagonally. a(p,p)=1. In a pool table of dimensions 2 X 1, the ball bounces once and exits. a(2,1)=2. The square array a(p,q) begins: 1 2 3 4 5 6 7 2 1 4 2 6 3 8 3 4 1 6 7 2 9 4 2 6 1 8 4 10 5 6 7 8 1 10 11 6 3 2 4 10 1 12 7 8 9 10 11 12 1
Crossrefs
Cf. A059026 (the triangle version).
Programs
-
Java
long a(long p, long q) { long i = 0, x = 0, y = 0, dx = +1, dy = +1, s = 1; while ((((x % p) != 0) || ((y % q) != 0)) || (i == 0)) { i ++; long xx = x + dx; long yy = y + dy; boolean xok = (0 <= xx) && (xx <= p); boolean yok = (0 <= yy) && (yy <= q); if (xok && yok) { x = xx; y = yy; } else { s ++; if (! xok) { dx = -dx; } if (! yok) { dy = -dy; } }} return s; }
Formula
a(p,q) = (p + q) / gcd(p, q) - 1.
Comments