$ENTRY Go { = <BR 'P=' 7> <Prout <Zp_Add ( 5 ) 4 > ' = ' 2 > <Prout <Zp_Mul ( 5 ) 4 > ' = ' 6 > <Prout <Zp_Inv 5 > ' = ' 3 > ; } $EXTERN ADD , SUB , MUL , DIVMOD; $EXTERN CP, BR; $ENTRY Zp_Add { (e.A) e.B = <MOD <ADD (e.A) e.B>>; } MOD { e.1 = <MOD1 <DIVMOD (e.1) <CP 'P'> >>; } MOD1 { (e.Q) e.R = e.R; } $ENTRY Zp_Sub { (e.A) e.B = <MOD <SUB (<ADD (e.A) <CP'P'>>) e.B> >; } $ENTRY Zp_Mul { (e.A) e.B = <MOD <MUL (e.A) e.B>>; } $ENTRY Zp_Div { (e.A) e.B = <Zp_Mul (e.A) <Zp_Inv e.B> >; } $ENTRY Zp_Inv { e.M = <Zp_Inv1 (<CP 'P'>) ( 0 ) (e.M) ( 1 ) >; } Zp_Inv1 { (e.A) (e.X) ( 1 ) (e.Y) = e.Y; (e.A) (e.X) (e.B) (e.Y) = <Zp_Inv1 (eB) (eY) <Zp_Inv2 (e.X) (e.Y) <DIVMOD (e.A) e.B> > >; } Zp_Inv2 { (e.X) (e.Y) (e.Q) e.R = (e.R) (<Zp_Sub (e.X) <Zp_Mul (e.Y) e.Q> >) ; } *