REM $LANG: "qb"
REM $INCLUDE: 'polymodp.bi'
CONST Cpr = 21 ' number of CRT primes
DIM f(Cpr) AS Poly, g(Cpr) AS Poly, h AS Poly
DIM d(Cpr) AS Poly, v(Cpr) AS Poly
IF NOT CRTfile(Cpr) THEN SYSTEM
CrLf$ = CHR$(13) + CHR$(10)
CLS : Tim# = TIMER
cm$ = "Fibonacci polynomials with discriminants and values f(1)" + CrLf$
INPUT "max.index"; nx
FOR n = 1 TO nx
RESTORE
FOR i = 0 TO Cpr
READ Modulus ' prime moduli in polymodp.bi
CRTchar Modulus
IF n = 1 THEN
Letc f(i), 0: Letc g(i), 1 ' initialize recurrence
END IF
h = g(i): Shlp h, 1
Addp f(i), h: SWAP f(i), g(i) ' f(x)_n = x*f(x)_n-1 + f(x)_n-2
t = Disc(f(i)): Letc d(i), t
u = Eval(f(i), 1): Letc v(i), u
IF i = 0 THEN ' sample output for class nr. zero
nr$ = "F" + LTRIM$(STR$(n)) + ": "
Prntp f(i), nr$
PRINT " Mod"; STR$(Modulus)
PRINT " D ="; t; " f(1) ="; u
END IF
NEXT i
'
CRTprnt f(), 0, cm$ + CrLf$ + nr$ ' write poly for CRT-transform,
CRTprnt d(), 0, "Disc " ' discriminant,
CRTprnt v(), 0, "f(1)=": cm$ = "" ' value f(1)
NEXT n
Eind:
PRINT : PRINT "Timer:"; CSNG(TIMER - Tim#); "s"
i = CRTfile(0)
SYSTEM