RosettaCodeData/Task/Hamming-numbers/PureBasic/hamming-numbers.purebasic

30 lines
504 B
Plaintext

#X2 = 2
#X3 = 3
#X5 = 5
Macro Ham(w)
PrintN("H("+Str(w)+") = "+Str(Hamming(w)))
EndMacro
Procedure.i Hamming(l.i)
Define.i i,j,k,n,m,x=#X2,y=#X3,z=#X5
Dim h.i(l) : h(0)=1
For n=1 To l-1
m=x
If m>y : m=y : EndIf
If m>z : m=z : EndIf
h(n)=m
If m=x : i+1 : x=#X2*h(i) : EndIf
If m=y : j+1 : y=#X3*h(j) : EndIf
If m=z : k+1 : z=#X5*h(k) : EndIf
Next
ProcedureReturn h(l-1)
EndProcedure
OpenConsole("Hamming numbers")
For h.i=1 To 20
Ham(h)
Next
Ham(1691)
Input()