過去ログ

uchinyan
(考え方を少し変更しました。)
#26826の追加部分の補足
#26815のリンク先の一般式、
a(n) = 1/2 * (f(n,1) - f(n.2))
f(n,k) = Sum{(n - |x|) * (n - |y|)}, - n < x < n, - n < y < n, (x,y) = k
ですが、何となく分かったように思います。なかなかうまい考え方のようです。

今回の問題では、如何に同じ点を通る直線の重複を除くががポイントになります。
その除き方ですが、次のように考えているようです。例えば、
A-----B-----C-----D-----E-----F-----G-----H
となっているとします。このときは、結局は AH の 1 本だけしか意味がないのですが、これを
隣り合う二つの点からなる直線:線分 AB, BC, CD, DE, EF, FG, GH を延長した 7 本
隣り合う三つの点からなる直線:線分 AC, BD, CE, DF, EG, FH を延長した 6 本
と考えます。隣り合う二つの点からなる直線は、隣り合う三つの点からなる直線を含んでいるので、
(隣り合う二つの点からなる)意味のある直線は、7 - 6 = 1 本 になります。
ここで、隣り合う四つ以上の点からなる直線は、隣り合う二つの点からなる直線 及び 隣り合う三つの点からなる直線 に、
原理的には含まれているので、差をとれば相殺されて考える必要がない、ことになります。
なお、後で、それらを考える必要がある場合も考察します。

さて、この考えの下に、今回の問題を、傾きに注目して数えていきます。
傾きを、横方向を x、縦方向を y として、y/x と書きます。また、x と y の最大公約数をg(x,y)と書くことにします。
すると、x > 0, y >= 0 に対して、
・0/1 = 0/2 = 0:
隣り合う二つの点からなる直線は、g(1,0) = 1 で、3 * 4 = 12 本。
隣り合う三つの点からなる直線は、g(2,0) = 2 で、2 * 4 = 8 本。
そこで、意味のある直線は、12 - 8 = 4 本になります。
実際の引き算は、横方向の四つの各直線ごとに 3 - 2 = 1 を行う必要がありますが、
最終的な本数はそれらの和なので、結局、上式に一致します。以下も同様です。
・1/1 = 2/2 = 1:
隣り合う二つの点からなる直線は、g(1,1) = 1 で、3 * 3 = 9 本。
隣り合う三つの点からなる直線は、g(2,2) = 2 で、2 * 2 = 4 本。
そこで、意味のある直線は、9 - 4 = 5 本になります。
・2/1 = 4/2 = 2:
隣り合う二つの点からなる直線は、g(2,1) = 1 で、2 * 3 = 6 本。
隣り合う三つの点からなる直線は、g(4,2) = 2 で、0 本。
そこで、意味のある直線は、6 - 0 = 6 本になります。
・3/1 = 6/2 = 3:
隣り合う二つの点からなる直線は、g(3,1) = 1 で、1 * 3 = 3 本。
隣り合う三つの点からなる直線は、g(6,2) = 2 で、0 本。
そこで、意味のある直線は、3 - 0 = 3 本になります。
・3/2 = 6/4 = 3/2:
隣り合う二つの点からなる直線は、g(3,2) = 1 で、1 * 2 = 2 本。
隣り合う三つの点からなる直線は、g(6,4) = 2 で、0 本。
そこで、意味のある直線は、2 - 0 = 2 本になります。
以上ですべてですが、実際の傾きは、x/y -> y/x, y -> -y が可能なこと、0 -> -0 は無意味なことを考慮すると、
1 * 2 * 4 + 2 * (1 * 5 + 2 * 6 + 2 * 3 + 2 * 2) = 8 + 2 * (5 + 12 + 6 + 4) = 8 + 54 = 62 本
となって、正解が得られます。

上記の場合分けを x/y -> y/x を補って#26826の追加部分と比べると、対応がつくことが分かると思います。
これ以上の詳細は冗長になるので省略しますが、一般式が導けること、少なくとも導けそうなこと、も分かると思います。
なお、a(n) の 1/2 は、傾きとしては意味がない x -> -x, y -> -y の同時変換が可能なことを補完しているものと思われます。

なお、この考え方を拡張すると、例えば、ちょうど二つの点だけを通る直線の本数も、同様に計算できます。
今求まっているのは、正確には、隣り合う二つの点からなる意味のある直線 なので、
これから、隣り合う三つの点からなる意味のある直線 を引けばいいです。
ところが、
隣り合う三つの点からなる意味のある直線 は、隣り合う四つの点からなる直線 から 隣り合う三つの点からなる直線 を引けばいい
ことになります。
先ほどの議論から予想がつくと思いますが、傾きは同じにして、
隣り合う三つの点からなる直線は g(x,y) = 2 の場合で、1 * 2 * 8 + 2 * (1 * 4 + 2 * 0 + 2 * 0 + 2 * 0) = 24 本
隣り合う四つの点からなる直線は g(x,y) = 3 の場合で、1 * 2 * 4 + 2 * (1 * 1 + 2 * 0 + 2 * 0 + 2 * 0) = 10 本
そこで、隣り合う三つの点からなる意味のある直線 は、24 - 10 = 14 本となるので、
ちょうど二つの点だけを通る直線 は、62 - 14 = 48 本 になります。
これは、例の数列サイトの id A018809
http://www.research.att.com/~njas/sequences/A018809
ですね。
ネコの住む家   3月3日(金) 15:48:48   MAIL:uchi@sco.bekkoame.ne.jp   26829

過去問題一覧へ戻る