In .Net 4.0 we now have a BigInteger to play with.
This is how I used to do it as can be seen LTD Puzzle 5: Calculating the Fibonacci Sequence.
Module Module1
Sub Main()
Dim x As Double
Console.WriteLine("Give the number to create")
Dim input As String
input = Console.ReadLine()
If Double.TryParse(input, x) AndAlso x > 2 Then
Dim y As Double
Dim oldz As Double
Dim z As Double = 0
Dim newz As Double = 1
Console.WriteLine(z & ",")
Console.WriteLine(newz & ",")
For y = 1 To x
Try
oldz = newz
newz += z
Console.WriteLine(y & ". " & newz & ",")
z = oldz
Catch ex As Exception
Console.WriteLine("end reached")
Exit For
End Try
Next
End If
Console.ReadLine()
End Sub
End Module```
Which runs out of bytes at around 1475 when using the double.
There is a way to do this with string if you don’t have .Net 4.0.
```vbnet
Imports System.Numerics
Module Module1
Sub Main()
Dim x As Double
Console.WriteLine("Give the number to create")
Dim input As String
input = Console.ReadLine()
If Double.TryParse(input, x) AndAlso x > 2 Then
Dim y As BigInteger
Dim oldz As BigInteger
Dim z As BigInteger = 0
Dim newz As BigInteger = 1
Console.WriteLine(z.ToString & ",")
Console.WriteLine(newz.ToString & ",")
For y = 1 To CType(x, BigInteger)
Try
oldz = newz
newz += z
Console.WriteLine(y.ToString & ". " & newz.ToString & ",")
z = oldz
Catch ex As Exception
Console.WriteLine("end reached")
Exit For
End Try
Next
End If
Console.ReadLine()
End Sub
End Module
To make the above work I had to reference System.Numerics and do an Imports. And I had to add a few ToStrings to.
I tried it with 10000 which gives this as a result.
5443837311356528133873426099375038013538918455469596702624771584120858286
56223490170830515479389605411738226759780263173843595847511162414391747026429591
69925586334117906063048089793531476108466259072759367899150677960088306597966641
96582493772180038144115884104248099798469648737533718002816376331778192794110136
92627509795098007135967180238147106699126442147752544785876745689638080029622651
33111359929762726679441400101575800043510777465935805362502461707918059226414679
00569075232189586814236784959388075642348375438634263963597073375626009896246266
87461120417398194048750624437098686543156268471861956201461266422327118150403670
18825205314845875817193533529827837800351902529239517836689467661917953884712441
02846393544948461445077876252952096188759727288922076853739647586954315917243453
71936112637439263373130058961672480517379863063681150030883967495871026195246313
52447499505204198305187168321623283859794627245919771454628218399695789223798912
19943177546970521613108109655995063829726125384824200789710905475402843814961193
04650618661701229832889643527337507927860694447618535251444210779280459799045612
98129423809156055033032338919609162236698759922782923191896688017718575555520994
65332012844650237115371514174929091310489720345557750719664542523286202201950609
14835852238827110167084330511699421157751512555102516559318881640483441295570388
25477521111577395780115868397072602565614824956460538700280331311861485399805397
03155572752969339958607985038158144627643385882852953580342485084542644647168153
10015331804795674363968156533261525095711274804119281960221488491482843891241785
20174507305538928717857923509417743383331506898239354421988805429332440371194867
21554357654856549913451927109891980266518456492782782721295764924023550759555820
56475693653948733176590002063731265706435097094826497100387335174777134033190281
05575667931789470024118803094604034362953471997461392274791549730356412633074230
82405199999610154978466734045832685296038830112076562924599813625165234709396304
97340464451063653041636308236692422577614682884617918432247934344060799178833606
76846711185597501
I won’t even try to read that. And it’s pretty darn quick too. I guess you could easily go higher. I guess the sky is the limit.
Here is the version using strings as made by George Mastros.
```vbnet Sub Main() Dim Number As Long Console.WriteLine(“Give the number to create”) Dim input As String input = Console.ReadLine()
If Not IsNumeric(input & ".0e0") Then
Console.WriteLine("The number to calculate must be a valid integer greater than 2.")
Exit Sub
End If
Number = CLng(input)
FibonacciSequence(Number)
Console.ReadLine()
End Sub
Private Sub FibonacciSequence(ByVal NumberToCalculate As Long)
Dim arTemp() As String
Dim i As Long
ReDim arTemp(CInt(NumberToCalculate - 1))
arTemp(0) = "0"
arTemp(1) = "1"
For i = 2 To NumberToCalculate - 1
arTemp(CInt(i)) = AddString(arTemp(CInt(i - 2)), arTemp(CInt(i - 1)))
Next i
Console.WriteLine(Join(arTemp, ","))
End Sub
Private Function AddString(ByVal String1 As String, ByVal String2 As String) As String
Dim i As Long
Dim Output() As String
Dim CarryTheOne As Long
Dim Digit1 As Long
Dim Digit2 As Long
If Len(String1) < Len(String2) Then
String1 = Replace(Right(Space(Len(String2)) & String1, Len(String2)), " ", "0")
Else
String2 = Replace(Right(Space(Len(String1)) & String2, Len(String1)), " ", "0")
End If
ReDim Output(Len(String1))
CarryTheOne = 0
For i = Len(String1) To 1 Step -1
Digit1 = CLng(Mid(String1, CInt(i), 1))
Digit2 = CLng(Mid(String2, CInt(i), 1))
Output(CInt(i)) = CStr((Digit1 + Digit2 + CarryTheOne) Mod 10)
If Digit1 + Digit2 + CarryTheOne > 9 Then
CarryTheOne = 1
Else
CarryTheOne = 0
End If
Next
If CarryTheOne = 1 Then
Output(0) = "1"
End If
AddString = Join(Output, "")
End Function```