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