# Small Basic for Factoring • ### Question

• estou querendo fazer um programa no Small Basic para Fatorar um número digitado pelo usuário. Quero que sejam apresentados todos os fatores, quer repetidos ou não.

Até consegui fazer com que sejam apresentados os fatores só que, no caso de fatores que se repetem o programa que fiz não mostra a repetição.

Ex.: número = 100 resultado que consigo: 2 5

resultado que desejo :2 2 5 5

I'm wanting to do a program on Small Basic for Factoring a number entered by the user.I want them to appear all factors, whether or not repeated.

Even managed to make the factors are presented only in the case of factors that arerepeated that the program did not show the replay.

Example: number = 100 that can result: 2 5

result I want: 2 2 5 5

____________________________________________________________________________________________________________________________________________________

TextWindow.Write("Digite o número ")
For i = 2 to n
primo ="True"
VerificarPrimo()
If (primo = "True") Then
If (Math.remainder (n,i) = 0 ) Then
TextWindow.WriteLine(i)
n = n/i
EndIf
EndIf
endfor

Sub VerificarPrimo
For j = 2 To Math.SquareRoot(i)
If (Math.Remainder(i,j) = 0 ) Then
primo ="False"
Goto FimLoop
EndIf
EndFor
fimloop:
endsub

• Edited by Monday, February 14, 2011 9:07 PM
Sunday, February 13, 2011 11:43 AM

• Sergio, your code looks good - you spotted that you only need to check upto the square root etc.

The issue is that when you find a factor you divide by it to update n, but then you move onto the next possible divisor i and don't check for multiple values.  Here it is modified:

TextWindow.Write("Digite o número ")

For i = 2 to n
primo ="True"
VerificarPrimo()
If (primo = "True") Then
If (Math.remainder (n,i) = 0 ) Then
TextWindow.WriteLine(i)
n = n/i
i = i-1 ' Retry this divisor
EndIf
EndIf
endfor

Sub VerificarPrimo
For j = 2 To Math.SquareRoot(i)
If (Math.Remainder(i,j) = 0 ) Then
primo ="False"
Goto FimLoop
EndIf
EndFor
fimloop:
endsub

Good luck.

Also, if you are interested, here is something I was playing with trying to create factors of large numbers as efficiently as possible using SmallBasic.  Import VZS962.

• Proposed as answer by Saturday, February 19, 2011 8:05 PM
• Marked as answer by Wednesday, February 23, 2011 8:48 PM
Friday, February 18, 2011 9:00 PM

### All replies

• There are seveal ways this could be done, perhaps using prime numbers.  Plase show the code you have that finds the factors but not repeated factors to get more suggestions.
Sunday, February 13, 2011 2:28 PM
• Sergio, your code looks good - you spotted that you only need to check upto the square root etc.

The issue is that when you find a factor you divide by it to update n, but then you move onto the next possible divisor i and don't check for multiple values.  Here it is modified:

TextWindow.Write("Digite o número ")

For i = 2 to n
primo ="True"
VerificarPrimo()
If (primo = "True") Then
If (Math.remainder (n,i) = 0 ) Then
TextWindow.WriteLine(i)
n = n/i
i = i-1 ' Retry this divisor
EndIf
EndIf
endfor

Sub VerificarPrimo
For j = 2 To Math.SquareRoot(i)
If (Math.Remainder(i,j) = 0 ) Then
primo ="False"
Goto FimLoop
EndIf
EndFor
fimloop:
endsub

Good luck.