RosettaCodeData/Task/Brazilian-numbers/FutureBasic/brazilian-numbers.basic

67 lines
1.4 KiB
Plaintext

local fn sameDigits(n As short, b As short) As Boolean
short f
bool same
f = n Mod b : n = n \ b
While n > 0
If n Mod b <> f then same = _false: exit fn Else n = n \ b
Wend
same = _true
End fn = same
local fn isBrazilian(n As short) As Boolean
bool Brazilian
If n < 7 Then Brazilian = _false: exit fn
If n Mod 2 = 0 Then Brazilian = _true: exit fn
short b
For b = 2 To n - 2
If fn sameDigits(n, b) Then Brazilian = _true: exit fn
Next b
Brazilian = _False
End fn = Brazilian
local fn isPrime(n As short) As Boolean
bool Prime
If n < 2 Then Prime = _false
If n Mod 2 = 0 Then n = 2: exit fn
If n Mod 3 = 0 Then n = 3: exit fn
short d
d = 5
While d * d <= n
If n Mod d = 0 Then Prime = _false: exit fn Else d += 2
If n Mod d = 0 Then Prime = _false: exit fn Else d += 4
Wend
Prime = _True
End fn = Prime
str255 kind(2)
kind(0) ="": kind(1) = "odd": kind(2) = "prime"
short i
window 1,@"Brazilian numbers",(0,0,750,200)
For i = 0 To 2
print
Print "First 20 Brazilian numbers: " + kind(i)
short Limit
Limit = 20
short number
number = 7
do
If fn isBrazilian(number) Then Print " " + str$(number); : Limit -= 1
Select Case kind(i)
Case "" : number += 1
Case "odd" : number += 2
Case "prime"
Do
number += 2
Until fn isPrime(number)
End Select
until Limit <1
Next i
handleevents