67 lines
1.4 KiB
Plaintext
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
|