Buenas!.
Conociendo los caracteres Unicode adecuados para los exponentes (super indices) he podido crear este ejemplo.
Código:
Public Sub Main()
MostrarDescompFact(100)
End
Public Sub MostrarDescompFact(numero As Integer)''Mostrar descomposición factorial
Dim valor As String
Dim cfactores As New Collection
cfactores = Descomponer(numero)
Print numero; " = ";
For Each valor In cfactores
Print cfactores.key; String.Chr(DevolverSuperIndice(valor)); "*";
Next
Print 1
End
Public Sub Descomponer(numero As Integer) As Collection ''Descomponer un números en factores
Dim n As Integer
Dim factores As New Collection
n = 2
While n <= numero
If numero Mod n = 0 Then
numero = numero / n
If Not factores.Exist(n) Then
factores.Add(1, n)
Else
factores[n] += 1
Endif
Else
n += 1
Endif
Wend
Return factores
End
Public Function DevolverSuperIndice(valor As Integer) As Integer ''Devuelve el carácter unicode de exponente
Dim codigo As Integer
'De esta forma se ve mejor que usando Choose
'El valor 1 no es posible como exponente
Select Case valor
Case 2
codigo = 178
Case 3
codigo = 179
Case 4
codigo = &2074
Case 5
codigo = &2075
Case 6
codigo = &2076
Case 7
codigo = &2077
Case 8
codigo = &2078
Case 9
codigo = &2079
End Select
Return codigo
End
' Public Sub DevolverSuperIndice2(valor As Integer) As Integer
' 'Esto no va a funcionar
' Return Choose(valor, Null, 178, 179, &2074, &2075, &2076, &2077, &2078, &2079)
'
' End
Salida:
Cita:100 = 2²*5²*1
No existe un exponente "1", si fuera dos como único factor primo. Hubiera salido 21...mejor 2*1
Eso en el caso del Select, que como veis no he comprobado que el valor fuera 1. He comenzado desde valor 2 para exponente.
A ver si se puede mejorar. Sobre todo la función que usa Choose.
Tener en cuenta que después de esto, podemos optar por crear otras funciones que nos puedan devolver
el máximo común divisor, el mínimo común múltiplo, etc. Ya sería más de un número. Por eso opté por dividir en varias funciones independientes.
El uso de colecciones me parece interesante para el ejemplo.
Saludos