Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
User Journal

Journal: primes solved

Journal by HarryatRock

After many false dawns, I think that I have solved the problem of discovering the underlying structure in the natural numbers that leads to the fascinating sequence of the primes, and the answer turns out to be cyclic groups, so simple that the basic idea is taught at primary level as clock arithmetic.
The primes are generated by a set of cyclic groups. Start by setting all the groups to zero, and move along the number line clocking all of the groups for each step. When all of the groups are at non-zero values, then the number of steps is prime. In practice we only need to use those groups corresponding to primes greater than 1 and less than or equal to the square root of the next prime (which we need to guess and add a safety margin). If we wish to avoid checking even numbers, we drop prime group 2, and "double clock" the groups.
Here is a VBA function of the basic algorithm A public array "primes" is used to hold the primes available to set up clocks, this can easily be loaded on the fly by calling the function, or just pull the body of the code and make a routine to generate all the primes you want by keeping the cycle states from one target to the next.
===================
Public Function genp(seed As Long) As Long
'needs primes list upto sqr of target
'seed must be odd, non prime works, if prime result is next prime NOT seed
        Dim limit As Long
        Dim cycles() As Long
        Dim i As Long, k As Long, l As Long
        Dim found As Boolean
        'find index to largest cycle in play
        l = Sqr(2 * seed) ' bigger than needed
        limit = 1
        While primes(limit) l
                limit = limit + 1
        Wend
        limit = limit - 2 'twiddle to avoid 1&2
        'set up cyclic groups in play for prime
        ReDim cycles(1 To limit, 1 To 2) 'two arrays might be faster
        ' set groups to states at prime
        For i = 1 To limit
                k = primes(i + 2)
                cycles(i, 1) = k
                cycles(i, 2) = seed Mod k
        Next
        ' now start looking for genp
        found = False
        genp = seed
        Do
                genp = genp + 2 'skip evens by double clocking cycles
                found = True
                For i = 1 To limit 'loop goes on after zero to keep sync
  ' cycles(i, 2) = icinc(cycles(i, 2), cycles(i, 1)) '2 calls for clarity
  ' cycles(i, 2) = icinc(cycles(i, 2), cycles(i, 1)) ' a faster in line method
                        cycles(i, 2) = cycles(i, 2) + 2
                        If (cycles(i, 2) = cycles(i, 1)) Then cycles(i, 2) = 0
                        If (cycles(i, 2) = cycles(i, 1) + 1) Then cycles(i, 2) = 1
                        If (cycles(i, 2) = 0) Then found = False ' this is the primality test
                Next i
        Loop Until (found)
End Function

================
I think that this could be recoded to optimise multi-thread hardware, and I have variations which avoid the need to use modulus to get start clock settings. For instance a function which generates a list of primes starting from 1 (all clocks are 1) and if we start with a factorial then all clocks are zero.

I would be grateful for any comments on this idea, and if anybody implements the idea as a excel binary addin I would love a copy.

If imprinted foil seal under cap is broken or missing when purchased, do not use.

Working...