Function GetSig(Byval N As Uinteger) As Uinteger 'Return signature of N 'A "signature" is the count of each digit in N packed into a 32-bit word Dim As Uinteger Sig = 0 Do While N > 0 Sig += 1 Shl (N Mod 10) N \= 10 Loop Return Sig End Function Dim As Uinteger limite = 1e9 Dim Shared As Boolean Sieve(limite) Sub MakeSieve(Size As Uinteger) 'Make prime number sieve Dim As Uinteger Prime, i, K Size \= 2 'ignore even numbers For i = 0 To Size 'set Sieve flags all true Sieve(i) = True Next For i = 0 To Size If Sieve(i) Then 'found a prime, which is equal to Prime = i * 2 + 3 ' twice the index + 3 K = i + Prime 'first multiple to strike off While K <= Size 'strike off all multiples Sieve(K) = False K += Prime Wend End If Next End Sub MakeSieve(limite) Print "Smallest members of first 25 Ormiston triples:" Dim As Uinteger Cnt = 0, N0 = 0, N1 = 0, Sig0 = 0, Sig1 = 0, N = 3, Sig Dim As Double t0 = Timer Do If Sieve(N \ 2 - 1) Then ' is prime Sig = GetSig(N) If Sig = Sig0 Andalso Sig = Sig1 Then Cnt += 1 If Cnt <= 25 Then Print Using "#,###,###,###"; N0; If Cnt Mod 5 = 0 Then Print End If End If Sig0 = Sig1: Sig1 = Sig N0 = N1: N1 = N End If If N >= limite Then Print Cnt; " Ormiston triples before one billion." : Exit Do N += 2 Loop Sleep