VBとフィボナッチに明るい方、ぜひお願いします。。
VisualBasic2008ExpressEditionにおいて、フィボナッチ数列の剰余の周期性の長さを求めるプログラムを組みましたが、一部正常に動作してくれません。詳しい方がおりましたら、修正点を教えていただけないでしょうか
先に念のため、フィボナッチ数列とその周期について説明しておきます。
まずフィボナッチ数列とは、1,1,2,3,5,8,13,21,34,55,89,144,233,377,610, のような数列のことです。
それぞれの項をある自然数で割った場合、その余りの数には特定の周期性が見られます。具体的な例でいくと、例えば5でそれぞれの項を割り、その余りを書き下していくと
1,1,2,3,0,3,3,1,4,0,4,4,3,2,0,2,2,4,1,0, 1,1,2,3,0,3…
と、あるところから先はそれまでの列の繰り返しになります。この場合、ひと周期の長さは20ということになります。
今回組んだ以下のプログラムは、上記の例のように何らかの自然数でフィボナッチ数列の各項を割った場合、その周期の長さがどうなるかを求めるプログラムです。
しかし、どこかに間違いがあるようで、周期の長さが80以上になるような場合であると、正常に動作してくれません。残念ながら私ではその原因が分からないので、
もしよろしければ修正すべき点を教えていただけないでしょうか? よろしくお願いいたします。。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a(1000), b(1000), c, n, x
a(1) = 1 : a(2) = 1 : n = 2
x = Val(TextBox1.Text)
Do
n = n + 1
Label1.Text = n
a(n) = a(n - 2) + a(n - 1)
Label2.Text = a(n)
b(n) = a(n) Mod x
Label3.Text = b(n)
a(n + 1) = a(n - 1) + a(n)
Label4.Text = a(n + 1)
b(n + 1) = a(n + 1) Mod x
Label5.Text = b(n + 1)
If b(n) * b(n + 1) = 1 Then
c = n - 1
Exit Do
End If
Loop
Label6.Text = c
End Sub
End Class