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
SourceForge.net logo