Ormiston triples: Difference between revisions
Content added Content deleted
(Added FreeBASIC) |
|||
Line 914: | Line 914: | ||
<1 billion: 368 |
<1 billion: 368 |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
|||
{{trans|XPLo}} |
|||
<syntaxhighlight lang="vbnet">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</syntaxhighlight> |
|||
=={{header|Go}}== |
=={{header|Go}}== |