Data update
This commit is contained in:
parent
ed705008a8
commit
0df55f9f24
2196 changed files with 32999 additions and 3075 deletions
53
Task/Ormiston-triples/FreeBASIC/ormiston-triples.basic
Normal file
53
Task/Ormiston-triples/FreeBASIC/ormiston-triples.basic
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue