Data update
This commit is contained in:
parent
61b93a2cd1
commit
5af6d93694
858 changed files with 20572 additions and 2082 deletions
67
Task/Circular-primes/FutureBasic/circular-primes.basic
Normal file
67
Task/Circular-primes/FutureBasic/circular-primes.basic
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
begin globals
|
||||
_last1 = 7
|
||||
CFTimeInterval t
|
||||
byte n(_last1 +1) //array of digits
|
||||
uint64 list(20), p10 = 1
|
||||
short count, digits, first1 = _last1
|
||||
n(_last1) = 2 //First number to check
|
||||
end globals
|
||||
|
||||
local fn convertToNumber as uint64
|
||||
short i = first1
|
||||
uint64 nr = n(i)
|
||||
while i < _last1
|
||||
i++ : nr = nr * 10 + n(i)
|
||||
wend
|
||||
end fn = nr
|
||||
|
||||
void local fn increment( dgt as short )
|
||||
select n(dgt)
|
||||
case 1, 7, 5 : n(dgt) += 2
|
||||
case 3 : if digits then n(dgt) = 7 else n(dgt) = 5
|
||||
case 9 : n(dgt) = 1
|
||||
if dgt == first1 then first1-- : digits++ : p10 *= 10
|
||||
fn increment( dgt -1 )
|
||||
case else : n(dgt)++
|
||||
end select
|
||||
end fn
|
||||
|
||||
local fn isPrime( v as uint64 ) as bool
|
||||
if v < 4 then exit fn = yes
|
||||
if v mod 3 == 0 then exit fn = no
|
||||
uint64 f = 5
|
||||
while f*f <= v
|
||||
if v mod f == 0 then exit fn = no
|
||||
f += 2
|
||||
if v mod f == 0 then exit fn = no
|
||||
f += 4
|
||||
wend
|
||||
end fn = yes
|
||||
|
||||
void local fn circularPrimes
|
||||
uint64 num, nr
|
||||
short r
|
||||
while ( count < 19 )
|
||||
num = fn convertToNumber
|
||||
if fn isPrime( num )
|
||||
nr = num
|
||||
for r = 1 to digits
|
||||
nr = 10 * ( nr mod p10 ) + ( nr / p10 ) //Rotate
|
||||
if nr < num then break //Rotation of lower number
|
||||
if fn isPrime( nr ) == no then break //Not prime
|
||||
next
|
||||
if r > digits then list( count ) = num : count++
|
||||
end if
|
||||
fn increment( _last1 )
|
||||
wend
|
||||
end fn
|
||||
|
||||
window 1, @"Circular Primes in FutureBasic", (0, 0, 280, 320)
|
||||
t = fn CACurrentMediaTime
|
||||
fn circularPrimes
|
||||
t = fn CACurrentMediaTime - t
|
||||
for count = 0 to 18
|
||||
printf @"%22u",list(count)
|
||||
next
|
||||
printf @"\n Compute time: %.3f ms", t * 1000
|
||||
handleevents
|
||||
Loading…
Add table
Add a link
Reference in a new issue