Question:
Find the smallest number that can be expressed as
the sum of 3 consecutive prime numbers,
the sum of 11 consecutive prime numbers,
the sum of 25 consecutive prime numbers,
the sum of 171 consecutive prime numbers,
the sum of 1225 consecutive prime numbers,
and is itself a prime number.
For example, 41 is the smallest prime number that can be expressed as
the sum of 3 consecutive primes (11 + 13 + 17 = 41) and
the sum of 6 consecutive primes (2 + 3 + 5 + 7 + 11 + 13 = 41).
Your answer:
My solution with VB6
- Dim a(100000000) As Byte, p(10000000) As Long, num As Long, n As Long
- Sub Getprimes()
- Dim i&, j&, k
- p(0) = 2 'The 1st prime
- k = 10000 'sqrare root of 10^8
- n = 100000000 '10^8
- For i = 3 To k Step 2
- If a(i) = 0 Then
- num = num + 1
- p(num) = i
- For j = i * i To n Step 2 * i 'Eractosthenes
- a(j) = 100 'Not prime number
- Next
- End If
- Next
- For i = k + 1 To n Step 2 'List all prime numbers to array p()
- If a(i) = 0 Then
- num = num + 1
- p(num) = i
- End If
- Next
- End Sub
- Private Sub Command1_Click()
- Dim s As String, tm As Single
- s = InputBox("Please enter numbers:", "Info", "3,11,25,171,1225") 'Input all numbers the question has listed
- tm = Timer
- Getprimes
- s = minprime(s)
- tm = Timer - tm
- Clipboard.Clear
- Clipboard.SetText CStr(s) 'Copy the answer to Clipboard
- MsgBox "It cost me about " & Format(tm, "0.0000") & " seconds to find the answer: " & s & vbCrLf & "And it has been copied to the clipboard"
- End Sub
- Function minprime(myprimes As String) As Long
- Dim i&, j&, sum() As Long, count As Long, primedata
- primedata = Split(myprimes, ",")
- count = UBound(primedata)
- ReDim sum(count)
- For i = 0 To count
- For j = 1 To primedata(i) 'Small sum of continuous prime numbers
- sum(i) = sum(i) + p(j)
- Next
- If a(sum(i)) < 100 Then a(sum(i)) = a(sum(i)) + 1 'Meet one of the conditions
- For j = primedata(i) + 1 To num
- sum(i) = sum(i) + p(j) - p(j - primedata(i))
- If sum(i) > n Then Exit For
- If a(sum(i)) < 100 Then a(sum(i)) = a(sum(i)) + 1 'Meet one of the conditions
- If a(sum(i)) = count + 1 Then minprime = sum(i): Exit Function 'Meet all of the conditions,Ok
- Next
- Next
- End Function
It returns:
6954293