Microsoft Small Basic

Program Listing: LLS908
' Factorize Numbers
' -----------------------------------------------------------------------------------
StartProgram:
TextWindow.Write("Enter a number to factorize: ")
number = TextWindow.ReadNumber()
If number = 0 Then
Goto EndProgram
EndIf
TextWindow.WriteLine("")

divisor = 2
factors[0] = 0
index = 0

TextWindow.WriteLine("Factorizing...")
TextWindow.WriteLine("--------------------")

'-- Loop until our number hans't been reduced to 1
While number > 1

' -- Test for primality of current divisor
isPrime = 1
For i = 2 To Math.SquareRoot(divisor)
If Math.Remainder(divisor, i) = 0 Then
isPrime = 0
Goto EndPrime
EndIf
EndFor
EndPrime:

'-- Check if current divisor (which is a prime number) divides the numerator with no remainder
If isPrime = 1 And Math.Remainder(number, divisor) = 0 Then
factors[index] = divisor
index = index + 1
number = number / divisor
divisor = 2
Else
divisor = divisor + 1
EndIf
EndWhile

'-- Write to TextWindow our factors' expression: if a certain factor is recurrent, its power will be shown
power = 1
For i = 0 To Array.GetItemCount(factors)
If i > 0 And factors[i] = factors[i-1] Then
power = power + 1
Else
If power > 1 Then
TextWindow.Write("^" + power + " ")
power = 1
EndIf
EndIf

If i = 0 Or (i>0 And factors[i] <> factors[i-1]) Then
If i > 0 And i < Array.GetItemCount(factors) Then
TextWindow.Write(" * ")
EndIf
TextWindow.Write(factors[i])
EndIf
EndFor

'-- Clean factors array, and restart until number is void or zero
TextWindow.WriteLine("")
TextWindow.WriteLine("")
factors = ""
Goto StartProgram
EndProgram: