84 lines
1.9 KiB
Text
84 lines
1.9 KiB
Text
PROGRAM "akstest"
|
|
' AKS test for primes
|
|
|
|
DECLARE FUNCTION Entry ()
|
|
INTERNAL FUNCTION ExpandPoly(n@@)
|
|
INTERNAL FUNCTION PascalTriangle(n@@, @pasTri&&[])
|
|
INTERNAL FUNCTION IsPrime(n@@)
|
|
INTERNAL FUNCTION Vz$(b@)
|
|
$$PasTriMax = 33 ' for 32-bit integer type
|
|
|
|
FUNCTION Entry()
|
|
FOR n@@ = 0 TO 9
|
|
ExpandPoly(n@@)
|
|
NEXT
|
|
FOR n@@ = 2 TO $$PasTriMax
|
|
IF IsPrime(n@@) THEN PRINT FORMAT$("###", n@@);
|
|
NEXT
|
|
PRINT
|
|
END FUNCTION
|
|
|
|
FUNCTION ExpandPoly(n@@)
|
|
DIM pasTri&&[$$PasTriMax]
|
|
IF n@@ > $$PasTriMax THEN
|
|
PRINT n@@; " is out of range"
|
|
QUIT(1)
|
|
END IF
|
|
SELECT CASE n@@
|
|
CASE 0:
|
|
PRINT "(x - 1) ^ 0 = 1"
|
|
CASE 1:
|
|
PRINT "(x - 1) ^ 1 = x - 1"
|
|
CASE ELSE:
|
|
PascalTriangle(n@@, @pasTri&&[])
|
|
PRINT "(x - 1) ^"; n@@; " = x ^"; n@@;
|
|
bVz@ = $$TRUE
|
|
FOR j@@ = n@@ - 1 TO n@@ \ 2 + 1 STEP -1
|
|
PRINT " "; Vz$(bVz@); pasTri&&[n@@ - j@@]; " * x ^"; j@@;
|
|
bVz@ = NOT bVz@
|
|
NEXT
|
|
FOR j@@ = n@@ \ 2 TO 2 STEP -1
|
|
PRINT " "; Vz$(bVz@); pasTri&&[j@@]; " * x ^"; j@@;
|
|
bVz@ = NOT bVz@
|
|
NEXT
|
|
PRINT " "; Vz$(bVz@); pasTri&&[1]; " * x ";
|
|
bVz@ = NOT bVz@
|
|
PRINT Vz$(bVz@); pasTri&&[0]
|
|
END SELECT
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION PascalTriangle(n@@, @pasTri&&[])
|
|
' Calculate the n@@'th line 0.. middle
|
|
pasTri&&[0] = 1
|
|
j@@ = 1
|
|
DO WHILE j@@ <= n@@
|
|
INC j@@
|
|
k@@ = j@@ \ 2
|
|
pasTri&&[k@@] = pasTri&&[k@@ - 1]
|
|
FOR k@@ = k@@ TO 1 STEP -1
|
|
pasTri&&[k@@] = pasTri&&[k@@] + pasTri&&[k@@ - 1]
|
|
NEXT
|
|
LOOP
|
|
END FUNCTION
|
|
|
|
FUNCTION IsPrime(n@@)
|
|
DIM pasTri&&[$$PasTriMax]
|
|
IF n@@ > $$PasTriMax THEN
|
|
PRINT n@@; " is out of range"
|
|
QUIT(1)
|
|
END IF
|
|
PascalTriangle(n@@, @pasTri&&[])
|
|
res@ = $$TRUE
|
|
i@@ = n@@ \ 2
|
|
DO WHILE res@ AND (i@@ > 1)
|
|
res@ = res@ AND (pasTri&&[i@@] MOD n@@ = 0)
|
|
DEC i@@
|
|
LOOP
|
|
RETURN res@
|
|
END FUNCTION
|
|
|
|
FUNCTION Vz$(b@)
|
|
IF b@ THEN RETURN "-" ELSE RETURN "+"
|
|
END FUNCTION
|
|
END PROGRAM
|