The first 2 consecutive whole numbers each having 2 distinct prime factors are 14=2×7 and 15=3×5.
The first 2 consecutive whole numbers each having 3 distinct prime factors are 230=2×5×23 and 231=3×7×11.
The first 3 consecutive whole numbers each having 3 distinct prime factors are 644=22×7×23, 645=3×5×43 and 646=2×17×19.
Find the first 3 consecutive whole numbers each having 5 distinct prime factors.
The third of the first set of three numbers in a row with 5 factors is 1,042,406.
1042404 = 2^2 * 3 * 11 * 53 * 149
1042405 = 5 * 7 * 13 * 29 * 79
1042406 = 2 * 17 * 23 * 31 * 43
5 fctrs 1 in row 2310
5 fctrs 2 in row 254541
5 fctrs 3 in row 1042406
5 fctrs 4 in row 21871368
5 fctrs 5 in row 129963318
Each result shows the last in the given size group, as that's when the count got to the given value. That last one represents
129963314 = 2 * 13 * 37 * 53 * 2549
129963315 = 3 * 5 * 31 * 269 * 1039
129963316 = 2^2 * 7 * 97 * 109 * 439
129963317 = 11^2 * 17 * 23 * 41 * 67
129963318 = 2 * 3 * 89 * 199 * 1223
having gotten up to n = 179756471, before manually terminating this program:
DefDbl A-Z
Dim crlf$, fct(20, 1)
Private Sub Form_Load()
Form1.Visible = True
Text1.Text = ""
crlf = Chr$(13) + Chr$(10)
For n = 4 To 1000000000
f = factor(n)
If f >= 5 Then
consec5 = consec5 + 1
Else
consec5 = 0
End If
If consec5 > con5max Then
Text1.Text = Text1.Text & "5 fctrs " & consec5 & " in row " & n & crlf
con5max = consec5
End If
DoEvents
Next n
Text1.Text = Text1.Text & crlf & " done"
End Sub
Function factor(num)
diffCt = 0: good = 1
n = Abs(num): If n > 0 Then limit = Sqr(n) Else limit = 0
If limit <> Int(limit) Then limit = Int(limit + 1)
dv = 2: GoSub DivideIt
dv = 3: GoSub DivideIt
dv = 5: GoSub DivideIt
dv = 7
Do Until dv > limit
GoSub DivideIt: dv = dv + 4 '11
GoSub DivideIt: dv = dv + 2 '13
GoSub DivideIt: dv = dv + 4 '17
GoSub DivideIt: dv = dv + 2 '19
GoSub DivideIt: dv = dv + 4 '23
GoSub DivideIt: dv = dv + 6 '29
GoSub DivideIt: dv = dv + 2 '31
GoSub DivideIt: dv = dv + 6 '37
If INKEY$ = Chr$(27) Then s$ = Chr$(27): Exit Function
Loop
If n > 1 Then diffCt = diffCt + 1: fct(diffCt, 0) = n: fct(diffCt, 1) = 1
factor = diffCt
Exit Function
DivideIt:
cnt = 0
Do
q = Int(n / dv)
If q * dv = n And n > 0 Then
n = q: cnt = cnt + 1: If n > 0 Then limit = Sqr(n) Else limit = 0
If limit <> Int(limit) Then limit = Int(limit + 1)
Else
Exit Do
End If
Loop
If cnt > 0 Then
diffCt = diffCt + 1
fct(diffCt, 0) = dv
fct(diffCt, 1) = cnt
End If
Return
End Function
Function prmdiv(num)
Dim n, dv, q
If num = 1 Then prmdiv = 1: Exit Function
n = Abs(num): If n > 0 Then limit = Sqr(n) Else limit = 0
If limit <> Int(limit) Then limit = Int(limit + 1)
dv = 2: GoSub DivideIt
dv = 3: GoSub DivideIt
dv = 5: GoSub DivideIt
dv = 7
Do Until dv > limit
GoSub DivideIt: dv = dv + 4 '11
GoSub DivideIt: dv = dv + 2 '13
GoSub DivideIt: dv = dv + 4 '17
GoSub DivideIt: dv = dv + 2 '19
GoSub DivideIt: dv = dv + 4 '23
GoSub DivideIt: dv = dv + 6 '29
GoSub DivideIt: dv = dv + 2 '31
GoSub DivideIt: dv = dv + 6 '37
Loop
If n > 1 Then prmdiv = n
Exit Function
DivideIt:
Do
q = Int(n / dv)
If q * dv = n And n > 0 Then
prmdiv = dv: Exit Function
Else
Exit Do
End If
Loop
Return
End Function
Function nxtprm(x)
Dim n
n = x + 1
While prmdiv(n) < n
n = n + 1
Wend
nxtprm = n
End Function
|
Posted by Charlie
on 2017-03-17 10:23:55 |