RosettaCodeData/Task/AKS-test-for-primes/PureBasic/aks-test-for-primes.purebasic
2017-09-25 22:28:19 +02:00

43 lines
989 B
Text

EnableExplicit
Define vzr.b = -1, vzc.b = ~vzr, nMAX.i = 10, n.i , k.i
Procedure coeff(nRow.i, Array pd.i(2))
Define n.i, k.i
For n=1 To nRow
For k=0 To n
If k=0 Or k=n : pd(n,k)=1 : Continue : EndIf
pd(n,k)=pd(n-1,k-1)+pd(n-1,k)
Next
Next
EndProcedure
Procedure.b isPrime(n.i, Array pd.i(2))
Define m.i
For m=1 To n-1
If Not pd(n,m) % n = 0 : ProcedureReturn #False : EndIf
Next
ProcedureReturn #True
EndProcedure
Dim pd.i(nMAX,nMAX)
pd(0,0)=1 : coeff(nMAX, pd())
OpenConsole()
For n=0 To nMAX
Print(RSet(Str(n),3,Chr(32))+": ")
If vzr : Print("+") : Else : Print("-") : EndIf
For k=0 To n
If k>0 : If vzc : Print("+") : Else : Print("-") : EndIf : vzc = ~vzc : EndIf
Print(RSet(Str(pd(n,k)),3,Chr(32))+Space(3))
Next
PrintN("")
vzr = ~vzr : vzc = ~vzr
Next
PrintN("")
nMAX=50 : Dim pd.i(nMAX,nMAX)
Print("Primes n<=50 : ") : coeff(nMAX, pd())
For n=2 To 50
If isPrime(n,pd()) : Print(Str(n)+Space(2)) : EndIf
Next
Input()