how do I find prime factors of a number
Thanks Dana.
Squirrelled away ....with attribution.
Gord
On Tue, 29 Nov 2005 10:43:01 -0500, "Dana DeLouis"
wrote:
Perhaps a slight change to this excellent code might be:
For Fact = 2 To Sqr(OriginalNumber)
I was just messing around, and wrote a variation on this theme as follows:
The idea here was to skip 2 numbers at a time. (ie numbers ending in
1,3,5,7,9...)
Of course, checking 5 is a waste also, but it cuts the number of searches by
half.
Sub FactorInteger()
'// Needs: Microsoft Scripting Runtime
Dim Fact As Long
Dim TheRest As Long
Dim Limit As Long
Dim d As New Dictionary
TheRest = CLng(Val(InputBox("Number:")))
'// Just '2'
Do While TheRest / 2 = Int(TheRest / 2)
d.Add d.Count, 2
TheRest = TheRest / 2
Loop
Fact = 3
Limit = Sqr(TheRest)
Do Until TheRest = 1 Or Fact Limit
If TheRest / Fact = Int(TheRest / Fact) Then
d.Add d.Count, Fact
TheRest = TheRest / Fact
Else
Fact = Fact + 2
End If
Loop
If TheRest 1 Then d.Add d.Count, TheRest
[A:A].Clear
[A1].Resize(d.Count) = WorksheetFunction.Transpose(d.Items)
Cells(d.Count + 2, 1).FormulaR1C1 = "=Product(R1C:R[-2]C)"
End Sub
Looks like a good idea to limit variables to Long. Otherwise, using these
techniques, it may take a long time to factor a number
like 100000099999829 into 10000019 & 9999991.
HTH :)
|