Strange result in last digits of primes.

Evelyn Lamb and Scientific American drew my attention to the recently announced observation that if you consider the last digit of each successive prime number ( which must be a 1, 3, 7 or 9 after the first 2 and 5) then it 'avoids' the last digit of the previous prime.

Any mathematician /programmer immediately tries coding it to see this improbable result.

The original discoverers checked a billion digits. My code checks far fewer ( 360,000 or 1,000,000)!

Give the code time- it does a 'Sieve of Eratosthenes' first, displayed graphically on-screen...

Note how say '1' followed by '1' is far less common than '1' followed by any of '3, 7 or 9'.

Now to investigate how far down-the-line this avoidance persists!


WindowWidth  =1000
WindowHeight = 700
UpperLeftX   =  50
UpperLeftY   =  50

graphicbox #john.g2, 350,  10, 606, 610

open "Statistics of last digits of primes." for window as #john

    #john "trapclose [quit]"

    #john.g2 "down ; fill cyan"

    topinteger =1000000

    dim bin( 10, 10)    '   actually need only 1, 3, 7, 9.......

    dim ints( topinteger)
    for j =1 to topinteger
        ints( j) =1
    next j

    for j =2 to 1 +topinteger^0.5
        if ints( j) =1 then gosub [strikeout]
    next j

for j =2 to topinteger
    if ints( j) =1 then
        'print j
        currLastDigit =last( j)
        bin( currLastDigit, oldLastDigit) = bin( currLastDigit, oldLastDigit) +1
        oldLastDigit  =currLastDigit
    end if
next j

'data 1, 3, 7, 9

for i =1 to 9
    for j =1 to 9
        print bin( i, j),
    next j
    print ""
next i


function last( j)
    j$ =str$( j)
    last =val( right$(j$,1))
end function

    call setxy, i

    for k =2 *j to topinteger step j
        ints( k) =0
        call setxy, k
    next k

sub setxy jf
    y =int( jf /600)
    x =jf -600 *y
    #john.g2 "set "; 2+x; " "; 2+y
end sub

close #john